javascript正则表达式验证问题

javascript正则表达式验证问题,javascript,regex,Javascript,Regex,我正在为以下内容编写javascript正则表达式: 必须至少有一个数字 必须至少有一个大写字母 必须介于8-15个字符之间 我试过这样做: function isStrongPassword(strInput) { //works well except A1aaaaaa var regex = /^(?=.*\d)(^[A-Za-z0-9])(?=.*[A-Z]).{7,14}$/; return regex.test(strInput); } 这工作正常,但与有

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

  • 必须至少有一个数字
  • 必须至少有一个大写字母
  • 必须介于8-15个字符之间
  • 我试过这样做:

    function isStrongPassword(strInput) {
        //works well except A1aaaaaa
        var regex = /^(?=.*\d)(^[A-Za-z0-9])(?=.*[A-Z]).{7,14}$/; 
        return regex.test(strInput);
    }
    
    这工作正常,但与有效输入不匹配


    非常感谢您的帮助。

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

    这句话似乎足够了:

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


    请注意,将
    *
    切换到
    [^…]*
    与您的问题无关,但可以避免回溯。或者,您可以使用惰性匹配:
    *?

    由于
    (^[A-Za-z0-9])
    部分,您的正则表达式被破坏,这意味着在数字之后必须有一个字母或数字,然后是一个大写字母。这应该行得通

    /^(?=.*\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
    /              
    

    我还没有试过你的答案。但我的正则表达式与1AAAAAA、AAAAA A1、111Aaaa等匹配。。。我认为这不是原因,原因是它指定了一个字母或数字来开始正则表达式,然后是一个大写字母。所以它不符合你的测试,测试开始时只有一个大写字母,之后就没有了。哦,是的,现在我明白你的意思了。非常感谢你的解释。regex是我的弱点:)regex是一门黑暗的艺术,通常有问题,总是被低估,有时是不可或缺的。先生,你给的regex作品非常好。我不明白为什么在我的例子中我必须给出7,14,但是在你的正则表达式中,你用8,15检查了长度?因为在你的表达式中,
    (^[A-Za-z0-9])
    已经匹配并使用了一个字符,所以只有7到14个let可以匹配。在我的表达式中,只有lookahead不使用任何字符,因此
    必须匹配8到15次。