Yup验证密码至少包含一个特殊字符

问题描述 投票:0回答:1

我正在使用以下命令:

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

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

regex reactjs yup
1个回答
0
投票

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

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

只要有特殊字符,它就匹配任何输入。您更新的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'),
});

0
投票

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

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

以上正则表达式的解释:

^, $-匹配给定字符串的开始和结束。

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.