2014-02-12 2 views
2

Как создать регулярное выражение с нижеследующими условиями?Необходимость регулярного выражения для определенного условия

  1. МИН ПАРОЛЬ ДЛИНА: 8
  2. MIN количество символов: 1
  3. МИН КОЛИЧЕСТВО DIGITS: 1
  4. Минимальное количество специальных символов: 1
  5. MAX Повторяя ПЕРСОНАЖИ: 2
  6. МАКС. АЛФАВИТНЫЙ ПОРЯДОК: 2
  7. МАКСИМАЛЬНЫЙ ПОРЯДКА: 2

Пробовал:

^(?=(.*\d){1})(?=.*[[email protected]#$%_-]) (?=.*[0-9a-zA-Z]){1,2}.{8,}$ 
+1

Вы можете привести пример? – Amitesh

+1

Нет более близкого варианта голосования для * «недостаточно усилий или попыток решения» *? Что делать с такими вопросами? Ответьте или попросите больше OP или за что-нибудь проголосовать? (Я думаю, это принадлежит мета.) – Qtax

+0

Вы что-то пробовали? Если да, включите его в свой вопрос. – emh

ответ

2

Вы может сделать это (и я предполагаю, что буквы/цифры вы имеете в виду ASCII буква/цифру), но ваши последние два требования не будут простыми:

if (preg_match(
    '/^    # Start of string 
    (?=.*[a-z])  # Assert at least one letter 
    (?=.*[0-9])  # and one digit 
    (?=.*[^a-z0-9]) # and one "other" character 
    (?!.*(.)\1{2}) # and no three identical characters in a row 
    (?!.*(?:abc|bcd|cde|def|efg|fgh|ghi| 
      hij|ijk|jkl|klm|lmn|mno|nop| 
      opq|pqr|qrs|rst|stu|tuv|uvw| 
      vwx|wxy|xyz)) # and no three-letter sequence 
    (?!.*(?:123|234|345|456|567|678|789|890)) # and no three-digit sequence 
    .{8,}   # Match at least 8 characters 
    $    # End of string/ix',  
    $subject)) { 
    # Successful match 
} else { 
    # Match attempt failed 
} 

Если вы также хотите исключить буквы/цифры в порядке убывания (или таких, как zab или 901), вам нужно добавить их к чередованиям.

+1

Хотелось бы, чтобы я обновил это, написав почти тот же ответ! Ты подтолкнул меня на это! Единственное существенное отличие в моем ответе было явно указывать специальные символы '[! @ # $% _-]' как в примере OP. – JonM

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