1

我是关于正则表达式的初学者...我需要创建一个正则表达式来检查一个字符串是否至少有一个特殊字符和一个数字。我([0-9]+[!@#$%\^&*(){}[\]<>?/|\-.:;_-]+|[!@#$%\^&*(){}[\]<>?/|\-.:;_-]+[0-9]+)正在使用,但无法正常工作。请帮忙。

4

3 回答 3

2

一种简单的检查方法是对输入字符串进行 2 次测试,以确定是否存在每种类型的字符:

/[0-9]/.test(inputString) && /[special_characters]/.test(inputString)

该代码将按照您的描述执行:检查inputString. 但是,其余的没有限制inputString

填写special_characters您的特殊字符列表。在您的情况下,它将是:

/[0-9]/.test(inputString) && /[!@#$%^&*(){}[\]<>?/|.:;_-]/.test(inputString)

我为特殊字符删除了您的模式中的一些冗余转义符。(^不需要转义,-最后已经存在)。

与尝试编写执行相同工作的单个正则表达式相比,这使代码具有可读性和更少的维护麻烦。

于 2013-09-19T10:59:15.557 回答
1

试试这个正则表达式

(.*[0-9]+[!@#$%\^&*(){}[\]<>?/|\-]+|.*[!@#$%\^&*(){}[\]<>?/|\-]+[0-9]+)
于 2013-09-19T11:00:52.893 回答
0

如果特殊字符是指可以与[!-\/:-@[-`{-~]模式匹配的所有 ASCII 可打印符号和标点符号(请参阅检查字符串中的特殊字符,您可能会在那里找到更多特殊字符模式),您可以使用

/^(?=.*?\d)(?=.*?[!-\/:-@[-`{-~])/

或者,考虑到对比原理

/^(?=\D*\d)(?=[^!-\/:-@[-`{-~]*[!-\/:-@[-`{-~])/

请参阅正则表达式演示(我.*在最后添加到演示\n中的否定字符类,因为正则表达式是针对单个多行字符串进行测试的,在代码中的正则表达式测试方法中不需要它们)。

细节

  • ^- 字符串的开始
  • (?=.*?\d)- 除换行符外,任何 0 个或多个字符后必须至少有一个数字,尽可能少
  • (?=\D*\d)- 除数字外,任何 0 个或多个字符后必须至少有一个数字
  • (?=.*?[!-\/:-@[-{-~])` - 在任何 0 个或多个字符(换行符除外)之后必须至少有一个可打印的 ASCII 标点/符号,尽可能少
  • (?=[^!-\/:-@[-{-~]*[!-/:-@[- {-~])- 除了可打印的 ASCII 标点/符号之外,任何 0 个或多个字符之后必须至少有一个可打印的 ASCII 标点/符号。
于 2020-05-19T10:07:52.563 回答