我开始关于正则表达式...我需要创建一个正则表达式来检查字符串是否至少有一个特殊字符和一个数字。我正在使用([0-9]+[!@#$%^&*(){}[]<>?/|-.:;_-]+|[!@#$%^&*(){}[]<>?/|-.:;_-]+[0-9]+)
,但不起作用。请帮忙。
一种简单的检查方法是对输入字符串进行 2 次测试,以确定每种类型的字符是否存在:
/[0-9]/.test(inputString) && /[special_characters]/.test(inputString)
代码将按照您的描述执行:检查inputString
中是否有至少 1 位数字和至少 1 个特殊字符。不过,其余的inputString
没有限制。
在special_characters
中填写特殊字符列表。在您的情况下,它将是:
/[0-9]/.test(inputString) && /[!@#$%^&*(){}[]<>?/|.:;_-]/.test(inputString)
我删除了您的模式中的一些冗余转义以用于特殊字符。(^
不需要转义,最后-
已经在那里了)。
与尝试编写执行相同工作的单个正则表达式相比,这使得代码可读且维护麻烦更少。
试试这个正则表达式
(.*[0-9]+[!@#$%^&*(){}[]<>?/|-]+|.*[!@#$%^&*(){}[]<>?/|-]+[0-9]+)
如果您所说的特殊字符是指可以与[!-/:-@[-`{-~]
模式匹配的所有 ASCII 可打印符号和标点符号(请参阅检查字符串中的特殊字符,您可能会在那里找到更多特殊字符模式),您可以使用
/^(?=.*?d)(?=.*?[!-/:-@[-`{-~])/
或者,考虑到对比原理:
/^(?=D*d)(?=[^!-/:-@[-`{-~]*[!-/:-@[-`{-~])/
请参阅正则表达式演示(我在最后添加了.*
,并在演示中n
否定字符类,因为正则表达式是针对那里的单个多行字符串进行测试的,您在代码中的正则表达式测试方法中不需要它们)。
详
-
^
- 字符串的开头 -
(?=.*?d)
- 除换行符字符外,任何 0 或多个字符后必须至少有一个数字,尽可能少 -
(?=D*d)
- 除数字以外的任何 0 个或多个字符后必须至少有一个数字 -
(?=.*?[!-/:-@[-
{-~])' - 除换行符字符以外的任何 0 个或多个字符后必须至少有一个可打印的 ASCII 标点符号/符号,尽可能少 -
(?=[^!-/:-@[-
{-~]*[!-/:-@[-{-~])
- 除可打印的 ASCII 标点符号/符号外,任何 0 个或多个字符之后必须至少有一个可打印的 ASCII 标点符号/符号。