【问题标题】:how to check whether the given field is alphanumeric or not in PlayFramework如何在 PlayFramework 中检查给定字段是否为字母数字
【发布时间】:2017-05-27 09:02:12
【问题描述】:

我必须检查密码字段是否为字母数字,如果不是,它将引发自定义验证错误我正在使用播放框架但出现编译时错误

value checkAlphanumeric is not a member of 
     play.api.libs.json.Reads[String]
    - value checkAlphanumeric is not a member of 
     play.api.libs.json.Reads[String]

我无法达到我想要的结果我做错了这就是为什么我需要这里的代码

case class userUserSignUpValidation(firstName: String,
                                      lastName: String,
                                      email: String,
                                      password: String) extends Serializable

object UserSignUpValidation {
  val allNumbers = """\d*""".r
  val allLetters = """[A-Za-z]*""".r
  var validationErrorMsg=""
  implicit val readDirectUser: Reads[DirectUserSignUpValidation] = (
    (JsPath \ "firstName").read(minLength[String](1)) and
    (JsPath \ "lastName").read(minLength[String](1)) and
    (JsPath \ "email").read(email) and
    (JsPath \ "password").read(minLength[String](8)checkAlphanumeric))(UserSignUpValidation.apply _)
    def checkAlphanumeric(password:String)={
        val allNumbers = """\d*""".r
        val allLetters = """[A-Za-z]*""".r

        val errors = password match {
          case allNumbers() => Seq(ValidationError("Password is all numbers"))
          case allLetters() => Seq(ValidationError("Password is all letters"))
          case _ => Nil
        }
     }

我在这一行得到了错误

(JsPath \ "password").read(minLength[String](8)checkAlphanumeric))(UserSignUpValidation.apply _)

实现上述场景的正确方法是什么

【问题讨论】:

    标签: scala playframework playframework-2.5 playframework-json


    【解决方案1】:

    您的问题是您不能那样使用checkAlphanumeric 方法。您可能想要的是Reads 上的过滤器,因此我建议您执行以下操作(我使用预先存在的方法更改了检查的实现):

    implicit val readDirectUser: Reads[DirectUserSignUpValidation] = (
      (JsPath \ "firstName").read(minLength[String](1)) and
        (JsPath \ "lastName").read(minLength[String](1)) and
        (JsPath \ "email").read(email) and
        (JsPath \ "password").read(minLength[String](8).
          filterNot(ValidationError("Password is all numbers"))(_.forall(_.isDigit)).
          filterNot(ValidationError("Password is all letters"))(_.forall(_.isLetter))
        )) (UserSignUpValidation.apply _)
    

    【讨论】:

      【解决方案2】:

      我想知道为什么不在案例类中运行验证?

      case class userUserSignUpValidation(firstName: String,
                                            lastName: String,
                                            email: String,
                                            password: String) {
      
         assert(!password.matches("""[A-Za-z]*""") && !password.matches("""\d*"""), "Invalid password")
         // have other field validations here
      }
      

      在你的 UserSignUpValidation 中使用这样的隐式格式化程序:

      object UserSignUpValidation {
         implicit val userFormatter = JSON.format[userUserSignUpValidation]
      
          // de-serialization code here
      }
      

      【讨论】:

        猜你喜欢
        • 2017-01-24
        • 2013-08-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多