用于验证密码的JavaScript

时间:2010-09-09 07:26:52

标签: c# javascript regex unicode passwords

任何人都可以帮我写下以下说明中的正则表达式吗?

密码包含以下五个类别中至少三个的字符:

  • 英文大写字母(A - Z)
  • 英文小写字母(a - z)
  • 基数为10位(0 - 9)
  • 非字母数字(例如:!,$,#或%)
  • Unicode字符

密码的最小长度为6。

2 个答案:

答案 0 :(得分:3)

更好的方法是分解每个条件并为每个条件设置一个正则表达式。然后计算输入密码满意的数量。通过这种方式,您甚至可以告诉用户密码是否是平均值,符合标准还是非常强的密码。

if (password.length < 6) {
  alert("password needs to be atleast 6 characters long"); 
}

var count = 0;
//UpperCase
if( /[A-Z]/.test(password) ) {
    count += 1;
}
//Lowercase
if( /[a-z]/.test(password) ) {
    count += 1;
}
//Numbers  
if( /\d/.test(password) ) {
    count += 1;
} 
//Non alphas( special chars)
if( /\W/.test(password) ) {
    count += 1;
}
if (count < 3) {
  alert("password does not match atleast 3 criterias"); 
}

不确定如何使用正则表达式匹配unicode字符。休息所有条件都在上面。

答案 1 :(得分:1)

[A-Za-z!$#%\d\u0100]{6}匹配aS1%eĀ

\u0100适用于Â。您可以插入所需的其他Unicode代码。你可以找到它们here

编辑:对于至少6个字符,正确的正则表达式为[A-Za-z!$#%\d\u0100]{6,}

编辑2:要包含一系列Unicode字符(让它成为Latin Extended-B),正则表达式应该看起来像^[A-Za-z!$#%\d\u0100-\u017f]{6,}$。您可以找到Unicode代码范围here

编辑3:我开发了一个小功能,可以检查给定的密码是否符合标准。您需要在函数中定义unicode范围。

function isValidPassword(password) {    
    var unicodeRange = "\\u0100-\\u0105";
    var criteria = ["A-Z","a-z","\\d","!$#%",unicodeRange];

    // check whether it doesn't include other characters
    var re = new RegExp("^[" + criteria.join("") +"]{6,}$");
    if(!re.test(password)) return false;

    var minSatisfiedCondition = 3;
    var satisfiedCount = 0;
    for( var i=0; i < criteria.length; i++) {
      re = new RegExp("[" + criteria[i] + "]");
      if(re.test(password)) ++satisfiedCount;

    }
    return (satisfiedCount >= minSatisfiedCondition);
}​

有一个工作样本here