2016-08-01 4 views
0

Я пытаюсь написать регулярное выражение для проверки пароля для данного правила.Regex для комбинации заданных правил

Пароли должна быть не менее 8 символов в длине и содержат по крайней мере 3 из следующих 4 типов символов:

  • строчных букв (т.е. AZ)
  • заглавных букв (например, AZ)
  • номера (т.е. 0-9)
  • специальные символы (например,! @ # $ & *)

Я прошел this обсуждение и нашел this действительно отличный ответ там.

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

^(?=.*[A-Z])(?=.*[[email protected]#$&*])(?=.*[0-9])(?=.*[a-z]).{8,}| 
(?=.*[[email protected]#$&*])(?=.*[0-9])(?=.*[a-z]).{8,}| 
(?=.*[A-Z])(?=.*[0-9])(?=.*[a-z]).{8,}| 
(?=.*[A-Z])(?=.*[[email protected]#$&*])(?=.*[a-z]).{8,}| 
(?=.*[A-Z])(?=.*[[email protected]#$&*])(?=.*[0-9]).{8,}$ 

и она работает идеально видеть rubular, но я хочу, чтобы оптимизировать эти регулярные выражения, и я Не уверен. Есть ли способ упростить это. Любое предложение будет оценено по достоинству. Большое спасибо

+0

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

+0

@ WiktorStribiżew Я буду очень признателен Если вы можете предоставить любую полезную ссылку здесь, спасибо –

+0

Если регулярное выражение работает нормально, возможно, лучше задать этот вопрос будет [codereview.se]. –

ответ

3

Сделай сам (и тех, кто будет работать над этим приложением в будущем) в пользу, и разделить регулярное выражение 4:

{ 
    :lowercase => /regex_for_lowercase/, 
    :uppercase => /regex_for_uppercase/, 
    :digits => /regex_for_digits/, 
    :symbols => /regex_for_symbols/, 
} 

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