jQuery RegEx.如果字符串包含除任何字符



我有这个正则表达式,用于验证用户输入的内容

它必须是长度为 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 个字符
  • $- 字符串的结尾。

最新更新