Play 中文文档

Custom Validations

验证包 允许你调用 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)