我正在使用以下命令:
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错误,还是我做错了
您可以尝试使用以下正则表达式模式:
^.*[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?].*$
只要有特殊字符,它就匹配任何输入。您更新的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-9A-Za-z]*[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?][0-9a-zA-Z]*$
以上正则表达式的解释:
^, $
-匹配给定字符串的开始和结束。[
[0-9A-Za-z]*
-匹配给定范围内的任何字符零次或多次。[
[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]
-完全匹配给定集合中的一个特殊字符。
您可以找到正则表达式演示here.