§使用自定义验证
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)
下一步:自定义字段构造器
发现此文档中的错误?此页面的源代码可以在这里找到。在阅读文档指南后,请随时贡献拉取请求。有疑问或建议要分享?请访问我们的社区论坛,与社区开始对话。