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