我有这个正则表达式,用于验证用户输入的内容
它必须是长度为 8 - 16 个字符的值,并且可以包含某些特殊字符之一。
/^(?=.*d)(?=.*[a-z])(?=.*[A-Z])(?=.*[:;#~]).{8,16}$"
如果用户输入的内容与上述内容不匹配,我不会尝试显示警报。因此,允许使用a-z,A-Z,0-9和:;#~
,但其他任何内容都会显示警报。
所以Abcd1234#
没关系,但如果他们输入Abcd1234!$
if将显示警报,因为!
和$
不在比赛中。
我尝试在字符匹配的开头添加 ^ 以尝试否定它们,但这不起作用。
最好的方法是什么?
似乎您只需要允许前瞻中提到的字符,使用它们创建一个字符类并用它替换最后一个.
:
/^(?=.*d)(?=.*[a-z])(?=.*[A-Z])(?=.*[:;#~])[da-zA-Z:;#~]{8,16}$/
^^^^^^^^^^^^^^
查看正则表达式演示
[da-zA-Z:;#~]{8,16}
模式将匹配 8 到 16 个字符,这些字符可以是数字、ASCII 字母或:
、;
、#
或~
符号。
详情:
^
- 字符串的开头(?=.*d)
- 除换行符字符外,任何 0+ 字符后都必须有一个数字((?=D*d)
会更有效,因为它基于对比原理((?=.*[a-z])
- - 除换行符字符外的任何 0+ 字符后都必须有一个 ASCII 小写字母((?=[^a-z]*[a-z])
会更有效((?=.*[A-Z])
- 除换行符字符以外的任何 0+ 字符后必须有一个 ASCII 大写字母((?=[^A-Z]*[A-Z])
会更有效((?=.*[:;#~])
- 除换行符外的任何 0+ 字符后必须有:
、;
、#
或~
(您也可以使用(?=[^:;#~]*[:;#~])
([da-zA-Z:;#~]{8,16}
- 字符类中定义的 8 到 16 个字符$
- 字符串的结尾。