是的,使用正则表达式匹配问题进行验证
Yup validation with regex using matches problem
所以我使用 Yup 进行了以下验证:
const myValidtion = yup
.string()
.trim()
.matches(/[abcdefghijklmnopqrstuvwxyz]+/ , 'Is not in correct format')
.required();
因此,这将按预期通过:hello world
。但是让我困惑的是为什么这也会通过:hello WORLD
或者这也会通过:hello ,&$#$ world
另一方面,如果我们只输入像 *%$&#$($#
这样的无效字符,这将不会通过并显示错误。因此,正如我所见,如果 ALL 条目无效,这只会给我错误。
我正在寻找的是如何使用 Yup matches 方法在用户输入时不通过例如:hello ,*&) world
谁能帮我解决这个问题?
您的正则表达式应覆盖整个字符串,使用 ^
和 $
表示字符串的开始和结束:
/^[abcdefghijklmnopqrstuvwxyz]+$/
否则,它会匹配您的部分字符串,这就是为什么当您混合使用好字符和坏字符时它会匹配,但当每个字符都是坏字符时它会失败。
您可以使用这样的字符范围来缩短正则表达式:
/^[a-z]+$/
您可以使用此 online tool 来构建和测试您的正则表达式。
这对我有用:
const validationSchema = yup.object().shape({
password: yup
.string()
.required("Please enter your password")
.matches(
/^.*(?=.{8,})((?=.*[!@#$%^&*()\-_=+{};:,<.>]){1})(?=.*\d)((?=.*[a-z]){1})((?=.*[A-Z]){1}).*$/,
"Password must contain at least 8 characters, one uppercase, one number and one special case character"
),
confirmPassword: yup
.string()
.required("Please confirm your password")
.oneOf([yup.ref('password'), null], "Passwords don't match.")
});
分解正则表达式:
(?=.{8,}):设置最小字符数
((?=.[!@#$%^&()-=+{};:,<.>]){1 }): 验证列表中是否至少有 1 个字符 "!@#$%^&*()-=+{};:,<.>"
(?=.*\d): 验证是否有数字
((?=.*[a-z]){1}:验证是否有小写字母字符
((?=.*[A-Z]){1}:验证是否有大写字母字符
测试正则表达式代码
所以我使用 Yup 进行了以下验证:
const myValidtion = yup
.string()
.trim()
.matches(/[abcdefghijklmnopqrstuvwxyz]+/ , 'Is not in correct format')
.required();
因此,这将按预期通过:hello world
。但是让我困惑的是为什么这也会通过:hello WORLD
或者这也会通过:hello ,&$#$ world
另一方面,如果我们只输入像 *%$&#$($#
这样的无效字符,这将不会通过并显示错误。因此,正如我所见,如果 ALL 条目无效,这只会给我错误。
我正在寻找的是如何使用 Yup matches 方法在用户输入时不通过例如:hello ,*&) world
谁能帮我解决这个问题?
您的正则表达式应覆盖整个字符串,使用 ^
和 $
表示字符串的开始和结束:
/^[abcdefghijklmnopqrstuvwxyz]+$/
否则,它会匹配您的部分字符串,这就是为什么当您混合使用好字符和坏字符时它会匹配,但当每个字符都是坏字符时它会失败。
您可以使用这样的字符范围来缩短正则表达式:
/^[a-z]+$/
您可以使用此 online tool 来构建和测试您的正则表达式。
这对我有用:
const validationSchema = yup.object().shape({
password: yup
.string()
.required("Please enter your password")
.matches(
/^.*(?=.{8,})((?=.*[!@#$%^&*()\-_=+{};:,<.>]){1})(?=.*\d)((?=.*[a-z]){1})((?=.*[A-Z]){1}).*$/,
"Password must contain at least 8 characters, one uppercase, one number and one special case character"
),
confirmPassword: yup
.string()
.required("Please confirm your password")
.oneOf([yup.ref('password'), null], "Passwords don't match.")
});
分解正则表达式:
(?=.{8,}):设置最小字符数
((?=.[!@#$%^&()-=+{};:,<.>]){1 }): 验证列表中是否至少有 1 个字符 "!@#$%^&*()-=+{};:,<.>"
(?=.*\d): 验证是否有数字
((?=.*[a-z]){1}:验证是否有小写字母字符
((?=.*[A-Z]){1}:验证是否有大写字母字符
测试正则表达式代码