.match() возвращает null для регулярного выражения пароля

#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 ну, если я поддержу ваш ответ, то, безусловно, это хорошо 😉 (и у меня есть)