2010-09-09 105 views
3

任何人都可以帮我写下以下描述的正则表达式吗?要验证密码的JavaScript

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

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

密码的最小长度是6.

+5

为什么downvote? OP不希望创建基于Javascript的登录,而是在用户指定密码时进行简单验证。 – 2010-09-09 07:34:32

+1

关于伪强密码的一些旧评论:http://www.codinghorror.com/blog/2005/07/passwords-vs-pass-phrases.html – Douglas 2010-09-09 08:24:15

+0

对于正则表达式来说,这不是一个简单的任务。正如Sachin在他的anser中提出的那样,编写你自己的字符串解析例程将会更容易,并且如果你的标准匹配,它会被计数。 – splash 2010-09-09 08:33:10

回答

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

这是一条评论,而不是答案。 (完全同意,顺便说一句) – 2010-09-09 07:36:02

+0

更新了答案 – 2010-09-09 09:31:54

+0

由于萨钦,它工作正常 – Abhimanyu 2010-09-09 09:42:22

1

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

\u0100是为Â。你可以插入你需要的其他Unicode代码。你可以找到它们here

编辑:至少6个字符正确的正则表达式是[A-Za-z!$#%\d\u0100]{6,}。编辑2:要包含一系列的Unicode字符(让它是拉丁字母扩展-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

+0

有了这个正则表达式,你不知道是否至少有三个标准的匹配。 – splash 2010-09-09 08:38:19

+0

@splash:是的,你说得对。我编辑了我的答案并添加了验证功能。 – Zafer 2010-09-09 09:12:54