我想使用.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部分时,名称将验证并显示错误消息。
答案 0 :(得分:0)
您需要使用lookeaheads,以便数字和大写字母可以按任何顺序排列。您也不需要使用$
进行锚定,除非您要验证其余字符。
if (!/^(?=\D*\d)(?=[^A-Z]*[A-Z])[a-zA-Z]/.test(y))
^
断言字符串的开头(?=\D*\d)
断言数字在字符串中的某处(?=[^A-Z]*[A-Z])
断言大写字母在字符串[a-zA-Z]
断言第一个字符是一个字母。2&amp;中的前瞻3不要前进光标。这就是为什么4指的是第一个角色。
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!");
使用此功能,您实际上可以告诉用户您的系统不喜欢的密码是什么,允许他们更正,而不必采取沮丧的猜测。它还允许您随时轻松添加和删除条件。
我强烈推荐这个选项......
嗯,这是谎言。我强烈建议让用户拥有他们想要的任何(不安全)密码。你正在哈希(对吧?),所以你已经履行了保证密码安全的职责。用户首先要使用安全密码。