【问题标题】:Yup validate password contains at least one special character是的,验证密码至少包含一个特殊字符
【发布时间】:2020-09-16 14:29:08
【问题描述】:

我正在使用以下是的:

export const validationSchema = Yup.object().shape({
  password: Yup.string()
    .required('Password is required')
    .matches(
      /^[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]*$/,
      'Need one special character',
    ),
  confirmPassword: Yup.string()
    .oneOf([Yup.ref('password'), null], 'Passwords must match')
    .required('Password confirm is required'),
});

验证密码字符串中是否有一个特殊字符。

@ => valid
@a => invalid
a@ => invalid
aa => invalid, of course

我还在线测试了正则表达式模式,以确保该模式能够捕获字符串中的任何特殊字符 我想知道这可能是错误还是我做错了什么

【问题讨论】:

    标签: regex reactjs yup


    【解决方案1】:

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

    ^.*[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?].*$
    

    只要它有一个特殊字符,它就会匹配任何输入。你更新的 React 代码:

    export const validationSchema = Yup.object().shape({
        password: Yup.string()
           .required('Password is required')
           .matches(
               /^.*[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?].**$/,
              'Need one special character',
           ),
       confirmPassword: Yup.string()
          .oneOf([Yup.ref('password'), null], 'Passwords must match')
        .required('Password confirm is required'),
    });
    

    【讨论】:

      【解决方案2】:

      你可以试试下面的正则表达式:

      ^[0-9A-Za-z]*[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?][0-9a-zA-Z]*$
      

      上述正则表达式的解释:

      ^, $ - 分别匹配给定字符串的开头和结尾。

      [0-9A-Za-z]* - 匹配给定范围内的任何字符零次或多次。

      [!@#$%^&amp;*()_+\-=\[\]{};':"\\|,.&lt;&gt;\/?] - 匹配给定集合中的一个特殊字符。

      你可以找到正则表达式演示here.

      【讨论】:

      • 谢谢,我忘了添加模式来匹配特殊字符前后的任何字符。
      • 感谢您的分解!非常有帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-18
      • 2017-02-06
      • 2011-12-12
      • 1970-01-01
      • 2015-07-14
      • 1970-01-01
      相关资源
      最近更新 更多