RegEx, чтобы убедиться, что строка содержит хотя бы один нижний регистр char, верхний регистр char, цифру и символ
Что такое регулярное выражение, чтобы убедиться, что данная строка содержит по крайней мере один символ из каждой из следующих категорий.
- Нижний регистр
- Верхний символ
- Digit
- Символ
Я знаю шаблоны для отдельных наборов, а именно [a-z]
, [a-z]
, \d
и _|[^\w]
(я получил их правильно, не так ли?).
Но как их объединить, чтобы убедиться, что строка содержит все их в любом порядке?
Ответы
Ответ 1
Если вам нужно одно регулярное выражение, попробуйте:
(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*\W)
Краткое объяснение:
(?=.*[a-z]) // use positive look ahead to see if at least one lower case letter exists
(?=.*[A-Z]) // use positive look ahead to see if at least one upper case letter exists
(?=.*\d) // use positive look ahead to see if at least one digit exists
(?=.*\W]) // use positive look ahead to see if at least one non-word character exists
И я согласен с SilentGhost, \W
может быть немного шире. Я бы заменил его набором символов следующим образом: [[email protected]#$%^&*.,?]
(Не стесняйтесь добавлять больше, конечно!)
Ответ 2
Вы можете сопоставить эти три группы отдельно и убедиться, что все они присутствуют. Кроме того, [^\w]
кажется слишком широким, но если это вам нужно, вы можете заменить его на \W
.
Ответ 3
Bart Kiers, ваше регулярное выражение имеет пару вопросов. Лучший способ сделать это:
(.*[a-z].*) // For lower cases
(.*[A-Z].*) // For upper cases
(.*\d.*) // For digits
Таким образом, вы ищете независимо от того, в начале, в конце или посередине. В вашем случае у меня много проблем со сложными паролями.