【问题标题】:JavaScript to validate passwordJavaScript 验证密码
【发布时间】:2010-09-09 07:26:52
【问题描述】:

谁能帮我写一个关于以下描述的正则表达式?

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

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

密码的最小长度为6。

【问题讨论】:

  • 为什么投反对票? OP 不希望创建基于 Javascript 的登录,而是在用户指定密码时进行简单验证。
  • 一些关于伪强密码的老密码:codinghorror.com/blog/2005/07/passwords-vs-pass-phrases.html
  • 对于正则表达式来说,这不是一项简单的任务。正如 Sachin 在他的分析器中提出的那样,编写自己的字符串解析例程并计算您的条件是否匹配会更容易。
  • 不要忘记在服务器端代码中进行验证。 JavaScript 很容易被禁用和欺骗。

标签: c# javascript regex unicode passwords


【解决方案1】:

解决此问题的更好方法是拆分每个条件并为每个条件设置一个正则表达式。然后计算输入的密码满足了多少。通过这种方式,您甚至可以告诉用户密码是普通密码、符合标准还是非常强的密码。

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 字符。其余所有条件均符合上述条件。

【讨论】:

  • 这是评论,不是答案。 (完全同意,顺便说一句。)
【解决方案2】:

[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

【讨论】:

  • 使用这个正则表达式你不知道至少 3 个 OP 条件是否匹配。
  • @splash:是的,你是对的。我已经编辑了答案并添加了验证功能。
猜你喜欢
  • 2011-08-14
  • 2013-12-09
  • 2013-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多