我正在尝试为密码验证创建一个javascript正则表达式.接受密码的规则是
* ^ !我在网上找到了一个例子并将其修改如下
(?=.*[0-9]{2,})(?=.*[a-z])(?=.*[A-Z]{2,}).{12,}
Run Code Online (Sandbox Code Playgroud)
但是,这仍然会忽略特殊字符要求,并且只有在大写字符和数字按后续顺序排列时才有效.这些是我用这个得到的结果
aMMericano11 - true
aMmeRican1o1 - false
Run Code Online (Sandbox Code Playgroud)
我希望第二个也被接受,当然还增加了特殊字符.
谁可以帮我这个事?
无视我对任意密码规则徒劳无益的讽刺评论,你试图立即做太多.
你正在做的是"它有12个字母或更多,一个符号*^!和至少两个大写字母和至少两个数字和至少一个小写字母"......
你应该做的是:
将大问题分解为小问题,最终会获得更好的用户体验,因为您可以准确地告诉用户他们想要的内容.
问题在于前瞻:
(?=.*[0-9]{2,})
Run Code Online (Sandbox Code Playgroud)
该模式要求图案[0-9]{2,}(例如,2位数字)出现在文本中.你可能想要的是:
(?=(.*[0-9]){2,})
Run Code Online (Sandbox Code Playgroud)
这允许数字由其他字符分隔,而不是连续.
同样的问题适用于大写字母规则.拼凑这个,最后的表达式将是:
(?=(.*[0-9]){2,})(?=.*[\*^!])(?=.*[a-z])(?=(.*[A-Z]){2,}).{12,}
Run Code Online (Sandbox Code Playgroud)
当且仅当密码符合有效性规则时,表达式才匹配.如果需要更多粒度(例如,为了检测违反特定规则),您可能需要将表达式分解为更小的表达式.