Регулярное выражение: проверить, если строка только [a-zA-Z0-9], 8+ символов, имеет хотя бы одну из строчных, прописных и цифровых цифр - PullRequest
1 голос
/ 27 апреля 2019

Вопрос в значительной степени в названии.Мне нужно проверить, является ли строка только буквенно-цифровой - без специальных символов, и она содержит, по крайней мере, одну строчную букву, по крайней мере, одну заглавную букву, по крайней мере, одно число.

passWORD1 проверяет, password2, PASSWORD3, passWORD, passWORD5*, psWD6не будет.

Это похоже на Regex для проверки, содержит ли строка хотя бы A-Za-z0-9, но не & & 1008 *, но не соответствует всем критериям.Я также мог бы пойти с , перебирая критерии , но мне действительно нужно регулярное выражение для передачи его в модуль validate.js (так, JS / Node), который будет выбрасывать только одиношибка с указанием всех критериев пароля сразу *

Ответы [ 2 ]

0 голосов
/ 27 апреля 2019

Это самый быстрый способ

^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)[a-zA-Z0-9]{8,}$

Если вы заботитесь о производительности, тест показывает, что она будет в два раза быстрее.

Regex1:   ^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)[a-zA-Z0-9]{8,}$
Options:  < m >
Completed iterations:   50  /  50     ( x 1000 )
Matches found per iteration:   1
Elapsed Time:    0.75 s,   754.66 ms,   754662 µs
Matches per sec:   66,254


Regex2:   ^(?=[A-Z0-9]*[a-z])(?=[a-zA-Z]*[0-9])(?=[a-z0-9]*[A-Z])[a-zA-Z0-9]{8,}$
Options:  < m >
Completed iterations:   50  /  50     ( x 1000 )
Matches found per iteration:   1
Elapsed Time:    1.32 s,   1321.82 ms,   1321822 µs
Matches per sec:   37,826
0 голосов
/ 27 апреля 2019

регулярное выражение, которое вам нужно для выполнения всех ваших требований, это

^(?=[A-Z0-9]*[a-z])(?=[a-zA-Z]*[0-9])(?=[a-z0-9]*[A-Z])[a-zA-Z0-9]{8,}$

В основном вам нужно три положительных прогнозов , чтобы обеспечить выполнение трех условий минимального присутствия трех видов символов и, наконец, использовать буквенно-цифровые символы, используя набор символов, за которым следует квантификатор как упоминается в регулярном выражении.

Пояснение:

  • ^ - начало строки
  • (?=[A-Z0-9]*[a-z]) - Забегайте вперед, чтобы обеспечить как минимум один строчный алфавит
  • (?=[a-zA-Z]*[0-9]) - смотреть вперед, чтобы убедиться, что хотя бы одна цифра
  • (?=[a-z0-9]*[A-Z]) - смотреть вперед, чтобы обеспечить хотя бы один алфавит в верхнем регистре
  • [a-zA-Z0-9]{8,} - записывает восемь или более буквенно-цифровых символов
  • $ - Соответствует концу строки

Regex Demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...