我有这个RegEx用于验证用户输入的内容
长度必须为8 - 16个字符,并且可以包含某些特殊字符。
/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[:;#~]).{8,16}$"
如果用户输入的内容与上述内容不符,我不会尝试显示警告。因此允许使用a-z,A-Z,0-9和:;#~
,但其他任何内容都会显示警告。
所以Abcd1234#
可以,但如果他们输入Abcd1234!$
,则会将警告显示为!
& $
不在比赛中。
我尝试将^添加到字符匹配的开头尝试否定它们,但这不起作用。
最好的方法是什么?
答案 0 :(得分:2)
似乎你只需要允许前瞻中提到的字符,用它们创建一个字符类并用它替换最后的.
:
/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[:;#~])[\da-zA-Z:;#~]{8,16}$/
^^^^^^^^^^^^^^
请参阅regex demo
[\da-zA-Z:;#~]{8,16}
模式将匹配8到16个字符,这些字符可以是数字,ASCII字母或:
,;
,#
或~
符号。
<强>详情:
^
- 字符串开头(?=.*\d)
- 除了换行符之外的任何0 +字符之后必须有一个数字((?=\D*\d)
会更有效,因为它基于contrast principle)(?=.*[a-z])
- - 除了换行符之外的任何0+字符之后必须有一个ASCII小写字母((?=[^a-z]*[a-z])
会更有效率)(?=.*[A-Z])
- 除了换行符之外的任何0+字符之后必须有一个ASCII大写字母((?=[^A-Z]*[A-Z])
会更有效率)(?=.*[:;#~])
- 除了换行符之外的任何0 +字符之后必须有:
,;
,#
或~
(您也可以使用(?=[^:;#~]*[:;#~])
)[\da-zA-Z:;#~]{8,16}
- 在字符类$
- 字符串结束。