2015-10-21 2 views
2

Я пытаюсь использовать это регулярное выражениерегулярное выражение не работает пароль

.*[[email protected]#$%^&*()].*[0-9]|[0-9].*[[email protected]#$%^&*()].* 

, чтобы мои пароли, по крайней мере, 1 специальный символ и 1 номер (что он делает). Но я также пытаюсь использовать пароли, такие как [email protected].

Как я могу изменить его, так что он тоже принимает буквы?

+5

Это очень плохое использование регулярных выражений. Просто потому, что у вас есть регулярные выражения, это не значит, что вы должны использовать их здесь. Простой персонаж по сканированию персонажей будет проще и будет работать так же хорошо. –

+1

Я бы, вероятно, не использовал такое регулярное выражение, но анализировал каждый символ и собирал ряд свойств (например, содержит число, строчный регистр, верхний регистр, специальный символ и т. Д.) И проверяет пароль для этих свойств. Легче понять, более гибко и проще сообщить пользователю, что не так с паролем. – Thomas

ответ

4

Его лучше сделать, используя lookaheads.

^(?=.*[[email protected]#$%^&*()])(?=.*[0-9])(?=.*[a-zA-Z]).*$ 

Проблема с подходом вы должны охватить все возможные комбинации, где в письме приходит первый, или номер приходит first.Using lookahead, которые являются 0 width assertions только тип проверки, мы можем провалить regex, если у него нет ни одного special character или number или letter.

(?=.*[a-zA-Z])

^^ ^^^^^^^ 

опережение просто утверждает, что для этого регулярного выражения, чтобы пройти там должна быть по крайней мере один letter где-то.

EDIT:

^(?=.*[[email protected]#$%^&*()])(?=.*[0-9]).*$ 

Используйте это, если письмо ограничение нет.

+1

Просто для других, которые наткнулись на это регулярное выражение, не могли бы вы также добавить объяснение (например, «соответствует, если первая позиция сопровождается ...»). – Thomas

+0

Я пробовал этот, и он работает для большинства паролей, которые мне в порядке. но он все равно должен принять 1! и! 1 как пароль, который он теперь делает, я думаю, что я собираюсь использовать другой подход, а не регулярное выражение lol, это дает мне головную боль – user3225981

+0

@ user3225981, но вы сказали, что должно быть хотя бы письмо? – vks

Смежные вопросы