Проверка пароля регулярного выражения Javascript со специальными символами
Я пытаюсь проверить пароль, используя регулярное выражение. Пароль обновляется, если у нас есть все символы в виде алфавитов. Где я иду не так? правильное выражение?
function validatePassword() {
var newPassword = document.getElementById('changePasswordForm').newPassword.value;
var minNumberofChars = 6;
var maxNumberofChars = 16;
var regularExpression = /^[[email protected]#$%^&*]{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;
}
}
Ответы
Ответ 1
Используйте положительные lookahead утверждения:
var regularExpression = /^(?=.*[0-9])(?=.*[[email protected]#$%^&*])[[email protected]#$%^&*]{6,16}$/;
Без него ваше текущее регулярное выражение соответствует только тому, что у вас есть 6-16 действительных символов, оно не подтверждает, что у него есть хотя бы номер и, по крайней мере, специальный символ. Это то, для чего предназначен взгляд.
-
(?=.*[0-9])
- утверждать, что строка содержит как минимум одно число;
-
(?=.*[[email protected]#$%^&*])
- Утверждение строки имеет хотя бы один специальный символ.
Ответ 2
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;
}
В нижнем ответе есть определенная проблема, так как она не проверяет целую строку из-за отсутствия [] при проверке символов и цифр, это правильная версия
Ответ 3
вы можете создать собственное регулярное выражение для проверки javascript
/^ : Start
(?=.{8,}) : Length
(?=.*[a-zA-Z]) : Letters
(?=.*\d) : Digits
(?=.*[!#$%&? "]) : Special characters
$/ : End
(/^
(?=.*\d) //should contain at least one digit
(?=.*[a-z]) //should contain at least one lower case
(?=.*[A-Z]) //should contain at least one upper case
[a-zA-Z0-9]{8,} //should contain at least 8 from the mentioned characters
$/)
Example:- /^(?=.*\d)(?=.*[a-zA-Z])[a-zA-Z0-9]{7,}$/
Ответ 4
Не пытайтесь делать слишком много за один шаг. Держите каждое правило отдельно.
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;
}
Ответ 5
Я использую следующий script для минимального 8-буквенного пароля, с хотя бы символом, строчными буквами и строчными буквами и числом
function checkPassword(str)
{
var re = /^(?=.*\d)(?=.*[[email protected]#$%^&*])(?=.*[a-z])(?=.*[A-Z]).{8,}$/;
return re.test(str);
}
Ответ 6
Если вы проверите длину отдельно, вы можете сделать следующее:
var regularExpression = /^[a-zA-Z]$/;
if (regularExpression.test(newPassword)) {
alert("password should contain atleast one number and one special character");
return false;
}