javascript正则表达式验证问题

时间:2013-02-22 09:43:33

标签: javascript regex

我正在为以下内容编写一个javascript正则表达式:

  1. 必须至少有一位数字
  2. 必须至少有一个大写字母
  3. 必须介于8-15个字符之间
  4. 我试过这样的话:

    function isStrongPassword(strInput) {
        //works well except A1aaaaaa
        var regex = /^(?=.*\d)(^[A-Za-z0-9])(?=.*[A-Z]).{7,14}$/; 
        return regex.test(strInput);
    }
    

    这是正常的,除了它与A1aaaaaa不匹配的事实,这是一个有效的输入。

    感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

由于(?=.*[A-Z]),您的表达式失败。第一个字符后面的字符都不是大写字母。

看来这个表达式应该足够了:

^(?=[^\d]*\d)(?=[^A-Z]*[A-Z]).{8,15}$

请注意,将.*切换为[^...]*与您的问题无关,但它可以避免回溯。或者,您可以使用延迟匹配:.*?

答案 1 :(得分:1)

你的正则表达式因为(^[A-Za-z0-9])部分而中断,这意味着在数字之后,必须有一个字母或数字, 然后 a大写字母。这应该工作

/^(?=.*\d)(?=.*[A-Z]).{8,15}$/; 

这就像这样......

/              
^              # start match
(?=.*\d)       # is there a digit up ahead (maybe after zero or more anythings)
(?=.*[A-Z])    # is there a capital up ahead (maybe after zero or more anythings)
.{8,15}        # 8 to 15 anythings
$              # end match
/