#javascript #jquery
#javascript #jquery
Вопрос:
Я написал код javascript, чтобы проверить минимум 4 и максимум 8 символов, по крайней мере, 1 прописной алфавит, 1 строчный алфавит, 1 число и 1 специальный символ, но он возвращает null как для неправильной, так и для правильной строки. Я не знаю, в чем проблема. пожалуйста, помогите.
var password = 'okK1@'; // you can take anything
var a;
a = password.match("^(?=.*[a-z])(?=.*[A-Z])(?=.*d)(?=.*[$@@$!%*?amp;])[A-Za-zd$@@$!%*?amp;]{4,8}");
if(a == false){
alert('false');
}
else if (a == true){
alert('true');
}
else{
alert('null');
}
Комментарии:
1. Не проще ли было бы создавать отдельные проверки для каждого «правила», а также возвращать пользователю конкретное сообщение об ошибке, в котором точно указано, что не так, разве PW не должен проверять?
2. Оберните строку внутри
new RegExp(... string here ...)
или используйте/regex here/
нотацию.3. Разве вам не нужно использовать
\d
внутри строки в JavaScript? Я думаю, что одиночный escape работает только в том случае, если вы используете/.../
регулярное выражение stype.4. Почему максимум восемь символов для пароля?
5. требование клиента @Jack.
Ответ №1:
JavaScript не поддерживает поиск в регулярных выражениях; тем не менее, проще разделить требования:
var password = ...;
var errors = [];
if (password.length < 4 /* || password.length > 8 */) {
errors.push("Password must be at least 4 characters");
}
if (!/[A-Z]/.test(password)) {
errors.push("Password must contain at least one uppercase letter");
}
if (!/[a-z]/.test(password)) {
errors.push("Password must contain at least one lowercase letter");
}
if (!/d/.test(password)) {
errors.push("Password must contain at least one digit");
}
if (!/[$@!%*?amp;]/.test(password)) {
errors.push("Password must contain at least one special character");
}
Вы можете выбрать досрочный выход, используя a return false;
, но выполнение этого таким образом будет иметь то преимущество, что пользователь точно узнает, почему его пароль не подходит.
Комментарии:
1. очень отличается от того, что я обычно делаю
2. Можно ли добавить все специальные символы: `,!,@,#,$,%,^,amp;,*,-,.,_
3. @Dhwani Конечно, просто добавьте все пропущенные символы в набор, но убедитесь, что дефис является либо первым, либо последним символом.
4. @Jack ну, если я поддержу ваш ответ, то, безусловно, это хорошо 😉 (и у меня есть)