#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:
Комментарии:
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();
});