【问题标题】:How to validate password length and regex same time如何同时验证密码长度和正则表达式
【发布时间】:2021-10-02 22:21:33
【问题描述】:

我正在使用yup 进行验证,它看起来像这样

export const signinSchema = yupResolver(
  yup.object().shape({
    username: yup.string().required("Email is a required field."),
    password: yup
      .string()
      .required("Password is a required field.")
      .matches(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@#$%^&+=])/, {
        message:
          "Password must be at least one uppercase, one lowercase, one special character and one number.",
      })
      .min(8, "Password must be at least 8 charaters."),
  }),
)

但我想知道我们可以验证密码长度(.min(8, "Password must be at least 8 charaters.")和正则表达式(

.matches(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@#$%^&+=])/, {
        message:
          "Password must be at least one uppercase, one lowercase, one special character and one number.",
      })

同时??就像将两个条件合二为一

非常感谢你

【问题讨论】:

  • 您的密码验证对用户体验不利。你应该分开你的验证规则。每个规则应该只做一件事。一条规则用于大写,一条用于小写,一条用于必需等。如果不将它们分开,您只能返回一般消息,这些消息不会告诉用户他们的输入到底有什么问题。

标签: reactjs react-native yup


【解决方案1】:

您可以使用以下正则表达式模式:

/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@#$%^&+=]).{8,}$/
                                                ^^^ change is here

这需要一个小写和大写字母、数字、特殊字符以及 8 个或更多字符。正如上面的评论所暗示的,如果您打算一次为每个规则提供一个反馈,您可能希望为每个条件分离出模式。

【讨论】:

    猜你喜欢
    • 2016-12-17
    • 2013-03-18
    • 2011-05-06
    • 2016-10-19
    • 2011-03-24
    相关资源
    最近更新 更多