[英]javascript regex to allow at least one special character and one numeric
我是关于正则表达式的初学者……我需要创建一个正则表达式来检查字符串是否至少有一个特殊字符和一个数字。 我使用([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 标点符号/符号,尽可能少(?=[^!-\\/:-@[-
{-~]*[!-/:-@[- {-~])
- 在任何 0 或多个之后必须至少有一个可打印的 ASCII 标点符号/符号可打印的 ASCII 标点符号/符号以外的字符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.