我正在使用此正则表达式来验证我的密码。 我的密码 -
我的正则表达式是
^.*(?=.{8,})(?=.*\d*\d)(?=.*[a-zA-Z]*[a-zA-Z])(?!.*\W).*$
但不幸的是,如果我尝试在开头放置特殊字符,它仍然匹配。
例如@password12
,!password12
。
答案 0 :(得分:2)
因为您的模式以.*
开头和结尾,所以它将匹配字符串开头或结尾处的任何内容,包括特殊字符。
您不应该使用单个正则表达式解决此问题,这会使代码难以阅读且难以修改。使用对该规则有意义的任何内容为每个规则编写一个函数,然后验证脚本变得清晰:
if is_alpha_only(password) &&
len(password) > = 8 &&
has_2_or_more_numbers(password) &&
has_2_or_more_alpha(password) ...
说真的,把所有这些都塞进一个正则表达式的重点是什么?
为什么不允许特殊字符?没有理由这样做。
答案 1 :(得分:2)
答案 2 :(得分:1)
我有类似的情况,其中客户端需要4个字母,1个数字,以及8到20个字符。我已根据您的问题调整了我的解决方案:
^(?=(?:[a-zA-Z0-9]*[a-zA-Z]){2})(?=(?:[a-zA-Z0-9]*\d){2})[a-zA-Z0-9]{8,}$
我理解其他答案会阻止你走这条路线,但有时客户想要客户想要的东西,不管你的相反论点是什么。