文件

§使用自訂驗證

驗證套件 validation package 允許您使用 verifying 方法建立臨時約束。不過,Play 提供您建立自訂約束的選項,使用 Constraint 案例類別。

在此,我們將實作一個簡單的密碼強度約束,使用正規表示法檢查密碼不是全部字母或全部數字。Constraint 採用一個傳回 ValidationResult 的函式,我們使用該函式傳回密碼檢查的結果

val allNumbers = """\d*""".r
val allLetters = """[A-Za-z]*""".r

val passwordCheckConstraint: Constraint[String] = Constraint("constraints.passwordcheck") { plainText =>
  val errors = plainText match {
    case allNumbers() => Seq(ValidationError("Password is all numbers"))
    case allLetters() => Seq(ValidationError("Password is all letters"))
    case _            => Nil
  }
  if (errors.isEmpty) {
    Valid
  } else {
    Invalid(errors)
  }
}

注意:這是一個故意簡單的範例。請考慮使用 OWASP 指南 進行適當的密碼安全性。

然後,我們可以將此約束與 Constraints.min 一起使用,以對密碼新增其他檢查。

val passwordCheck: Mapping[String] = nonEmptyText(minLength = 10)
  .verifying(passwordCheckConstraint)

下一步:自訂欄位建構函式


在此文件發現錯誤?此頁面的原始碼可以在 這裡 找到。在閱讀 文件指南 後,請隨時提交拉取請求。有問題或建議要分享嗎?前往 我們的社群論壇 與社群展開對話。