我想验证密码字段,如下所示:
首先检查密码是否只有小写 然后检查它的长度是否为最少8个字符。
我写了两个验证码如下:
/*check lowercase*/
def checkPasswordCase[T]: Reads[String] = {
Reads.StringReads.filter(ValidationError("Password not in lowercase"))(str => {
(str.matches("""[a-z]+"""))
})
}
/*check length*/
def checkPasswordLength[T](min:Int): Reads[String] = {
Reads.StringReads.filter(ValidationError("Invalid password length"))(str => {
(str.length >= min)
})
}
我按如下方式调用了代码,但编译错误Cannot prove that String <:< String => C.
(JsPath \ "user" \ "password").read[String](checkPasswordCase)(checkPasswordLength(8)) and ...
我尝试使用Reads.minLength(8)但出现了不同的错误。
我不能连续使用两个验证码吗?
答案 0 :(得分:0)
您可以使用keepAnd
或 andKeep
validators来执行此操作。这些组合器将同时运行Reads
,但只保留左或右操作数的成功结果:
val r = (JsPath \ "user" \ "password").read[String](
checkPasswordCase keepAnd checkPasswordLength(8))
val js = Json.obj("user" -> Json.obj("password" -> "FOO"))
println(js.validate[String](r))
// JsError(List((/user/password,List(
// ValidationError(List(Password not in lowercase),WrappedArray()),
// ValidationError(List(Invalid password length),WrappedArray())))))