Ema*_*avi 15 javascript validation typescript reactjs yup
所以我使用Yup进行了以下验证:
const myValidtion = yup
.string()
.trim()
.matches(/[abcdefghijklmnopqrstuvwxyz]+/ , 'Is not in correct format')
.required();
Run Code Online (Sandbox Code Playgroud)
所以有了这个,这将通过:hello world
正如预期的那样。但让我感到困惑的是为什么这也会通过:hello WORLD
或者这也会通过:hello ,&$#$ world
另一方面,如果我们只输入这样的无效字符,*%$&#$($#
就不会通过并向我显示错误。正如我所看到的,如果所有条目都无效,这只会给我错误。
我正在寻找的是如何使用 Yup 匹配方法在用户输入时不通过,例如: hello ,*&) world
谁能帮我这个?
jo_*_*_va 24
你的正则表达式应该覆盖你的整个字符串,通过使用^
和$
来表示字符串的开始和结束:
/^[abcdefghijklmnopqrstuvwxyz]+$/
Run Code Online (Sandbox Code Playgroud)
否则,它会匹配你的字符串的一部分,这就是为什么当你有好字符和坏字符混合时它匹配,但当每个字符都是坏字符时它会失败。
您可以使用这样的字符范围来缩短正则表达式:
/^[a-z]+$/
Run Code Online (Sandbox Code Playgroud)
您可以使用此在线工具来构建和测试您的正则表达式。
这对我有用:
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.")
});
Run Code Online (Sandbox Code Playgroud)
分解正则表达式:
(?=.{8,}):设置最小字符数
((?=. [!@#$%^& ()- =+{};:,<.>]){1}): 验证列表中是否至少有 1 个字符 "!@#$% ^&*()- =+{};:,<.>"
(?=.*\d): 验证是否有数字
((?=.*[az]){1}): 验证是否有小写字母
((?=.*[AZ]){1}): 验证是否有大写字母
您可以在https://regex101.com/r/rYT2yE/1测试正则表达式代码。
归档时间: |
|
查看次数: |
37647 次 |
最近记录: |