具有特殊字符的 JavaScript 正则表达式密码验证
2012-08-23
354772
我正在尝试使用正则表达式验证密码。如果我们将所有字符都作为字母,则密码会更新。我哪里错了?正则表达式正确吗?
function validatePassword() {
var newPassword = document.getElementById('changePasswordForm').newPassword.value;
var minNumberofChars = 6;
var maxNumberofChars = 16;
var regularExpression = /^[a-zA-Z0-9!@#$%^&*]{6,16}$/;
alert(newPassword);
if(newPassword.length < minNumberofChars || newPassword.length > maxNumberofChars){
return false;
}
if(!regularExpression.test(newPassword)) {
alert("password should contain atleast one number and one special character");
return false;
}
}
3个回答
使用正向 前瞻 断言:
var regularExpression = /^(?=.*[0-9])(?=.*[!@#$%^&*])[a-zA-Z0-9!@#$%^&*]{6,16}$/;
如果没有它,您当前的正则表达式只会匹配 6 到 16 个有效字符,它 不会 验证它是否至少有一个数字,并且 至少 有一个特殊字符。这就是上面的前瞻的作用所在。
-
(?=.*[0-9])
- 断言字符串至少有一个数字; -
(?=.*[!@#$%^&*])
- 断言字符串至少有一个特殊字符。
João Silva
2012-08-23
我使用以下脚本设置最少 8 个字母的密码,其中至少包含一个符号、一个大写字母和一个小写字母以及一个数字
function checkPassword(str)
{
var re = /^(?=.*\d)(?=.*[!@#$%^&*])(?=.*[a-z])(?=.*[A-Z]).{8,}$/;
return re.test(str);
}
Rujoota Shah
2016-12-02
function validatePassword() {
var p = document.getElementById('newPassword').value,
errors = [];
if (p.length < 8) {
errors.push("Your password must be at least 8 characters");
}
if (p.search(/[a-z]/i) < 0) {
errors.push("Your password must contain at least one letter.");
}
if (p.search(/[0-9]/) < 0) {
errors.push("Your password must contain at least one digit.");
}
if (errors.length > 0) {
alert(errors.join("\n"));
return false;
}
return true;
}
以下答案存在问题,因为在检查字符和数字时由于缺少 [ ] 而未检查整个字符串,这是正确的版本
atul-tagra
2013-05-23