正则表达式测试字符串中是否有两位以上的数字

时间:2011-09-25 17:47:58

标签: regex password-protection

据我所知,\d{2,}匹配2个或更多连续数字,但我需要知道字符串中是否有任何2位数。

我也很欣赏密码强度计的一些很好的链接。

我现在使用的是

function passwordStrengthPercent(pwd,username)
{
    var score = 0, special = /(.*[!,@,#,$,%,^,&,*,?,_,~,;,:,`,|,\\,\/,<,>,\{,\},\[,\],=,\+])/
    if (pwd.length < 8 ) return 0
    if (pwd.toLowerCase() == username.toLowerCase()) return -1
    score += pwd.length * 4
    score += ( checkRepetition(1,pwd).length - pwd.length )
    score += ( checkRepetition(2,pwd).length - pwd.length )
    score += ( checkRepetition(3,pwd).length - pwd.length )
    score += ( checkRepetition(4,pwd).length - pwd.length )
    if (pwd.match(/(.*[e].*[e].*[e])/))  score -= 15//most common letter in passswords?
    if (pwd.match(/(.*[a].*[a].*[a])/))  score -= 15//most common letter in passswords?
    if (pwd.match(/(.*[o].*[o].*[o])/))  score -= 10//most common letter in passswords?
    if (pwd.match(/^\l+$/) || pwd.match(/^\d+$/) )  return score/2//there was w here in regexp
    if (pwd.match(/(.*[0-9].*[0-9].*[0-9])/))  score += 10

    //todo additional rules 11
    if (pwd.match(special)) score += 15
    if (pwd.match(/([a-z].*[A-Z])|([A-Z].*[a-z])/))  score += 15
    if (pwd.match(/(w)/) && pwd.match(/(d)/))  score += 15
    if (pwd.match(special) && pwd.match(/(d)/))  score += 10
    if (pwd.match(special) && pwd.match(/(w)/))  score += 10
    if ( score < 0 ) return 0
    if ( score > 100 ) return 100
  return score
}

3 个答案:

答案 0 :(得分:2)

你可以尝试

^.*\d.*\d.*$

只有在包含(至少)两位数时才匹配。

答案 1 :(得分:1)

你可以使用:

\d.*\d

它匹配行中任意位置的两个数字,即使它们之间还有其他字符。

答案 2 :(得分:0)

检查是否有 完全 两位数字:

^[^\d]*\d[^\d]*\d[^\d]*$

使用grep查看测试:

kent$  echo "23
2   3
ax3x2x
aaaaa23
a222
2
3x3x4
3 4 5"|grep -P "^[^\d]*\d[^\d]*\d[^\d]*$"                                                                                                
23
2   3
ax3x2x
aaaaa23