首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript验证密码

问JavaScript验证密码
EN

Stack Overflow用户
提问于 2010-09-09 07:26:52
回答 2查看 1.6K关注 0票数 3

有人能帮我写以下描述的正则表达式吗?

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

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

密码的最小长度为6。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-09-09 07:34:57

处理此问题的更好方法是拆分每个条件,并对每个条件都有一个正则表达式。然后计算有多少人对输入的密码感到满意。通过这种方式,您甚至可以告诉用户密码是平均的、符合标准的还是非常强的密码。

代码语言:javascript
复制
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"); 
}

不确定如何使用regex匹配unicode字符。休息所有条件以上都可用。

票数 3
EN

Stack Overflow用户

发布于 2010-09-09 07:40:37

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

\u0100是为了更好的表达。您可以插入所需的其他Unicode代码。你可以找到他们这里。

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

编辑2:要包含一系列Unicode字符(假设是拉丁文扩展-B),正则表达式应该类似于^[A-Za-z!$#%\d\u0100-\u017f]{6,}$。您可以找到Unicode代码范围这里。

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

代码语言:javascript
复制
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);
}​

有一个工作样本这里。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3674564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档