javascript匹配验证密码

时间:2016-08-09 16:58:01

标签: javascript html html5

我想使用.match方法验证密码输入。 密码必须至少包含大写和数字,必须以字母开头。 我可以将所有这些资格放在一个单独的“if”语句中,或者我需要使用更多的匹配语句。 我尝试过类似的东西,但是不起作用

if (!y.match(/^[a-zA-Z]\d{1,}[A-Z]{1,}$/))

我将代码更改为以下内容:

function validate(){
    var x,y,z,abv="";
    x = document.getElementById("name").value;
    if (x.length<6){
            abv+="user name too short<br />";
    } else {
        abv+="validated<br />";
    }       
    y = document.getElementById("password").value;
    if (y.length<8||!y.match(!/^(?=\D*\d)(?=[^A-Z]*[A-Z])[a-zA-Z]/){
        abv+="Password do not pass validation!<br />";
    } 
    document.getElementById("aka").innerHTML = abv;

}

代码有问题吗?我运行的页面输入没有通过验证,但错误消息没有显示。当我取出.match部分时,名称将验证并显示错误消息。

2 个答案:

答案 0 :(得分:0)

您需要使用lookeaheads,以便数字和大写字母可以按任何顺序排列。您也不需要使用$进行锚定,除非您要验证其余字符。

if (!/^(?=\D*\d)(?=[^A-Z]*[A-Z])[a-zA-Z]/.test(y))
  1. ^断言字符串的开头
  2. (?=\D*\d)断言数字在字符串中的某处
  3. (?=[^A-Z]*[A-Z])断言大写字母在字符串
  4. [a-zA-Z]断言第一个字符是一个字母。
  5. 2&amp;中的前瞻3不要前进光标。这就是为什么4指的是第一个角色。

    Regex101 Demo

    function isValid(str) {
      return /^(?=\D*\d)(?=[^A-Z]*[A-Z])[a-zA-Z]/.test(str)
    }
    
    console.log(isValid("aB7"));
    console.log(isValid("a7B"));
    console.log(isValid("A%9"));

答案 1 :(得分:0)

虽然可以将所有内容放在一个正则表达式中,但我会认真地花一点时间问:“你应该吗?”

让我们说你的老板决定赞扬你做了密码验证的事情。 “哦,顺便说一句,你可以做到这样,你不能有三次相同的号码吗?”

当然,您可以将其添加到正则表达式((?!.*(\d)\1\1))中,但是您是否看到它很容易失控?

相反,坚持单独检查。像这样:

if( false); // dummy entry so that all tests begin "else if" for easier commenting out
else if( !y.match(/[A-Z]/)) alert("Password must contain an uppercase letter!");
else if( !y.match(/\d/)) alert("Password must contain a number!");
else if( !y.match(/^[a-z]/i)) alert("Password must start with a letter!");
// add more cases here, e.g.
// else if( y.length < 8) alert("Password must be 8 characters or longer!");
else alert("Password is OK!");

使用此功能,您实际上可以告诉用户您的系统不喜欢的密码是什么,允许他们更正,而不必采取沮丧的猜测。它还允许您随时轻松添加和删除条件。

我强烈推荐这个选项......

嗯,这是谎言。我强烈建议让用户拥有他们想要的任何(不安全)密码。你正在哈希(对吧?),所以你已经履行了保证密码安全的职责。用户首先要使用安全密码。