文档

§使用自定义验证

The validation package allows you to create ad-hoc constraints using the verifying method. However, Play gives you the option of creating your own custom constraints, using the Constraint case class.

这里,我们将实现一个简单的密码强度约束,使用正则表达式来检查密码不是全部字母或全部数字。A Constraint takes a function which returns a ValidationResult, and we use that function to return the results of the password check

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)

下一步:自定义字段构造器


发现此文档中的错误?此页面的源代码可以在这里找到。在阅读文档指南后,请随时贡献拉取请求。有疑问或建议要分享?请访问我们的社区论坛,与社区开始对话。