Тестовый пароль с регулярным выражением

#javascript #regex

#javascript #регулярное выражение

Вопрос:

Я хочу протестировать passwprd, в котором должно быть не менее 6 символов и 1 число. Какую строку регулярного выражения я могу использовать с JS, чтобы это сделать?

ОБНОВЛЕНО, я забыл написать, что он должен содержать не менее 6 буквенных символов и 1 цифровой символ, но он также должен разрешать специальные символы или любой другой символ. Не могли бы вы, пожалуйста, изменить свои ответы? Я высоко оценил ваши ответы

Комментарии:

1. для меня звучит как домашнее задание….

2. Хороший ресурс для изучения регулярных выражений: regular-expressions.info

Ответ №1:

Это действительно немного попахивает вопросом домашнего задания, ну да ладно. На самом деле вы можете выполнить это кратко, используя одно регулярное выражение и функцию «смотреть вперед».

 /(?=.{6}).*d.*/.test("helelo1")
  

Первый бит в скобках гласит «загляни вперед, чтобы увидеть, есть ли 6 символов». После этого мы проверяем наличие любого количества символов, за которым следует число, за которым следует любое количество символов.

Даже возможно достичь своей цели с помощью одного регулярного выражения, не имея способности заглядывать вперед… Просто немного сложно смотреть на решение и не морщиться:

 new RegExp("[0-9].....|"  
           ".[0-9]....|"  
           "..[0-9]...|"  
           "...[0-9]..|"  
           "....[0-9].|"  
           ".....[0-9]").test("password1")
  

Комментарии:

1. 1 за то, что ваше второе регулярное выражение действительно умное и ужасное одновременно. Я бы написал первый как /(?=.*d).{6,}/ , но это tomayto / томагто.

2. Второе регулярное выражение не будет работать. В требованиях указано «не менее 6 символов», поэтому технически вам потребуется бесконечное количество таких строк.

3. На самом деле, @cwolves, это сработает. Вам понадобится бесконечное количество строк, только если вы начинаете свое регулярное выражение с ^ и заканчиваете его с $.

Ответ №2:

Попробуйте это:

 password.match(/(?=.*d).{6}/);
  

Больше информации здесь.

Комментарии:

1. @cwolves — При ближайшем рассмотрении вы правы. Это было бы правдой, только если бы это было так /^(?=.*d).{6}$/ , что означает, что это на самом деле довольно умно, теперь, когда я думаю об этом. 1.

2. Хороший момент. Это выражение лучше всего подходит для определения, совпадают ли строки, но не для сопоставления всего пароля.

3. К вашему сведению, регулярное выражение на самом деле работает быстрее, чем раньше, поскольку движок может завершить работу и сказать «true», как только оно наберет 6 символов. Единственным недостатком является то, что это позволяет использовать все , даже пробелы, табуляции, нулевые символы и т.д.

Ответ №3:

Насколько я знаю, это лучше всего сделать с помощью комбинации строковых функций и регулярного выражения:

 if( myPass.match(/[a-zA-Z]/).length >= 6 amp;amp; myPass.match(/d/g).length ) {
    // Good passwords are good!
}
  

РЕДАКТИРОВАТЬ: Обновлено, чтобы включить новые условия. Специальные символы разрешены, но не обязательны.

Комментарии:

1. Я согласен, я не уверен, что вы можете сделать это с помощью прямого регулярного выражения.

Ответ №4:

 if (/.{6,}/.test(password) amp;amp; /d/.test(password)) {
    // success
} else {
    // fail
}
  

Комментарии:

1. Разве это не позволит использовать специальные символы?

2. Да. Спец никогда не говорил иначе.

Ответ №5:

 /^(?=[wd]{6,}$)(?=.*d)/.test(password)
  
  • требуется 6 или более символов (букв, цифр или _)
  • требуется хотя бы одна цифра
  • не допускает никаких специальных символов

Комментарии:

1. Почему не должны быть разрешены специальные символы?

2. @Justin — Просто говорю, что это им не позволит. Вы просто настраиваете [wd] , чтобы разрешить все, что вы хотите.

3. Ах, это имеет смысл. Кстати, он [wd] на самом деле избыточен; w включает цифры. regular-expressions.info/charclass.html#shorthand

Ответ №6:

Это js для проверки пароля,

он проверяет минимум 7 символов, содержит 1 заглавную букву, 1 цифру и 1 специальный символ и не должен содержать пробела, надеюсь, это вам поможет.

  pwLength = this.value.length;

if (pwLength > 7 amp;amp; pwLength < 21) {
        charLengthIcon.removeClass("fail").addClass("pass");
}
else charLengthIcon.removeClass("pass").addClass("fail");

if (this.value.match(/[A-Z]/g)) {
    capLetterIcon.removeClass("fail").addClass("pass");
}
else capLetterIcon.removeClass("pass").addClass("fail");

if (this.value.match(/[0-9]/g)) {
    numberIcon.removeClass("fail").addClass("pass");
}
else numberIcon.removeClass("pass").addClass("fail");

if (this.value.match(/[@#$%!$amp;~*^(){}?><.,;:"'- =|]/g)) {
    splcharIcon.removeClass("fail").addClass("pass");
}
else splcharIcon.removeClass("pass").addClass("fail");

if (this.value.match(/[s/]/g)) {
    whiteSpce.removeClass("pass").addClass("fail");
}
else whiteSpce.removeClass("fail").addClass("pass");


confirmPW();
  

});