我已经看过很多关于密码策略的正则表达式,但它们似乎都不适合我。首先,这是我的要求:
我尝试了几种不同的表达方式(见下文),除了#2之外,它们都能满足我的所有要求。似乎无论如何,我永远无法获得实际验证最大长度的正则表达式。以下是我尝试过的两个表达方式:
^.*(?=.{8,40})(?=.*\d).*$
(?=.{8,40})(?=.*[0-9]).*
非常感谢任何帮助!
答案 0 :(得分:1)
你走在正确的轨道上。有很多方法可以做到这一点..
^(?=.{8,40}$).*\d.*$
答案 1 :(得分:0)
根据您的要求,您可以使用此正则表达式:
^(?=.*?\d).{8,40}$
答案 2 :(得分:0)
(?= {8,40})(?= [0-9])。
这不起作用,因为表达式不是锚定。想一想:
.{8,40}
将匹配字符串中至少包含8个字符的任何位置,并且 more 超过40个字符只会阻止引擎继续匹配而不会导致表达式失败。
要拥有至少8个字符,但不超过40个字符,您需要将表达式锚定在字符串的开头和结尾。根据您的正则表达式引擎,以下一个(或两个)应该可以匹配有效长度,尽管语义略有不同:
^.{8,40}$
\A.{8,40}\z
寻找“一个正则规则来统治所有人”使得生活变得复杂,这是没有充分理由的。除非您有明显的性能原因,否则最好运行多个检查,无论是否有正则表达式。例如,在Ruby中:
def valid_password? str
return false if str.size < 8 or str.size > 40 or str !~ /\d/
true
end
valid_password? 'abcd1234'
#=> true
valid_password? 'abc'
#=> false
valid_password? 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
#=> false