使用自定义验证器
validation 包 允许你调用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)