用于密码验证的JavaScript正则表达式中包含字母数字字符

5
我正在使用以下正则表达式来验证密码,只接受字母数字字符。如果我输入两个字符,一个是字母,一个是数字,则该正则表达式有效;但如果超过两个字符,我的正则表达式将无法工作。如“期望行为”所示,我希望如果可能的话得到以下结果。有人能帮我重新编写我的正则表达式吗?
  function checkPasswordComplexity(pwd) {
        var regularExpression = /^[a-zA-Z][0-9]$/;
        var valid = regularExpression.test(pwd);
        return valid;
    }

当前情况

Password:Valid
a1:true
aa1:false
aa11:false

期望的行为

Password:Valid
aa:false (should have at least 1 number) 
1111111:false (should have at least 1 letter)
aa1:true
aa11:true
a1a1a1a1111:true

使用match()代替test()。 - Deepu
5
不要限制密码中允许的字符,这只会使它们变得更弱。 - Quentin
6个回答

16
你想要添加"一个或多个",目前你正在检查一个字母后面跟着一个数字。
尝试:
/^[a-zA-Z0-9]+$/

+ 表示“一个或多个”

我也加入了这些范围。

注意:虽然使用广泛的字符范围可以使密码更加强大,但我不明白为什么您想将密码限制在如此小的范围内。

这里是演示正确行为的 fiddle

如果您只想验证密码中至少有一个字母和至少有一个数字,您可以像这样检查:

function checkPasswordComplexity(pwd) {
    var letter = /[a-zA-Z]/; 
    var number = /[0-9]/;
    var valid = number.test(pwd) && letter.test(pwd); //match a letter _and_ a number
    return valid;
}

据我理解,OP希望该字符串至少包含一个字母和一个数字。 - georg
@Benjamin Gruenbaum感谢您!它解决了我的问题。关于最简单的密码复杂性,我们的客户需要的是仅包含字母数字的密码。事实上,这里的一些本地银行仍然只有字母数字密码。即使我们也在想为什么他们还没有转换到复杂密码。再次感谢您的帮助! - Jobert Enamno
不客气。我的经验是,在团队中工作时,如果不是每个人都是正则表达式专家,最好避免使用像前瞻和后顾这样的东西,除非你确定人们理解它们。这是一个很好而且强大的概念,但它会使只了解基本正则表达式的人难以阅读代码。祝你好运! - Benjamin Gruenbaum
1
如果解决方案的目的是验证同时包含字母和数字的输入,则此方法无效。 - xplorer1

5
function checkPasswordComplexity(pwd) {
        var regularExpression = /^(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+)$/;
        var valid = regularExpression.test(pwd);
        return valid;
    }

2
你可以使用这个:
/^(?=.*\d)(?=.*[a-z])[a-z\d]{2,}$/i

1
{
var pwd=document.getElementById('pwd').value;
var reg = /^[a-zA-Z0-9]{8,}$/;  
var re=reg.test(pwd);
alert(re);

}


1

Try doing this:

var regularExpression = /^[a-zA-Z0-9]+$/;

这意味着“一个或多个字母或数字”。然而,一些用户可能也想在他们的密码中输入符号(如&*#)。如果您只想确保至少有一个字母和数字,同时仍允许符号,请尝试以下内容:
var regularExpression = /^(?=.*[a-zA-Z])(?=.*[0-9]).+$/;

(?=.*[a-zA-Z])是正向先行断言。这意味着它确保其后有一个字母,但不影响正则表达式。


第二个永远不会匹配,你需要/^(?=.*[A-Z])等。 - georg

0

我认为JavaScript不支持环视,所以你可以使用:

^([a-zA-Z]+\d+)|(\d+[a-zA-Z]+)

但如果它们得到支持:

/^(?=.*\d)(?=.*[a-zA-Z])[a-zA-Z\d]{2,}$/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接