正则表达式Javascript
我在JavaScript中使用以下正则表达式进行密码策略检查:正则表达式Javascript,javascript,regex,Javascript,Regex,我在JavaScript中使用以下正则表达式进行密码策略检查: ^.*(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[@#$_])(?=.*[\d\W]).*$ 我使用在线正则表达式检查器尝试了上面的正则表达式 测试用例按预期通过,阴性测试用例失败。但在应用程序中部署相同的正则表达式时,无法正确验证 例如: Tracker@123不起作用,其中tRacker@123有效 Asd56544#12也可以正常工作 你能指出上面正则表达式的错误吗 您确
^.*(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[@#$_])(?=.*[\d\W]).*$
我使用在线正则表达式检查器尝试了上面的正则表达式
测试用例按预期通过,阴性测试用例失败。但在应用程序中部署相同的正则表达式时,无法正确验证
例如:
Tracker@123
不起作用,其中tRacker@123
有效
Asd56544#12
也可以正常工作
你能指出上面正则表达式的错误吗 您确定语法正确吗 看看这个JSFIDLE,在它里面所有的测试用例都通过了
我的建议是将这个正则表达式分成几个简单的正则表达式。 您可以为密码分配规则,并且可以为每个规则分配正则表达式 比如说
/[0-9]/
)/[a-z]/i
)使用这种方法,可以更快地管理验证。例如,一年后,您必须更改密码策略。你会忘记你的大正则表达式是什么意思(并且会花很多时间改变那个大正则表达式,或者做一个新的)。但是,只需使用少量单独的正则表达式(意思是规则),您就可以轻松配置密码策略谢谢大家的提示和回复。我删除了最后一部分(?=.[\d\W]),一切都开始正常工作。为什么我不应该指定\d或\W?2 user632323:通过添加(?=.[\d\W])您想做什么?它的意思是“一个数字前的任何符号,或者不是一个单词”嗯,你的三个测试用例都通过了(他们应该通过)。你能发布你的代码说它失败了吗?它似乎起作用了,也许问题在于你使用它的方式。前导的
*
或最后一组(?=.[\d\W])
有什么意义?(这不是你的问题)