Intereting Posts

Регулярное выражение PHP для проверки пароля

Я не получаю желаемого эффекта от скрипта. Я хочу, чтобы пароль содержал AZ, az, 0-9 и специальные символы.

  • Аризона
  • Аризона
  • 0-9> = 2
  • специальные символы> = 2
  • длина строки> = 8

Поэтому я хочу заставить пользователя использовать как минимум 2 цифры и не менее 2 специальных символов. Хорошо, мой сценарий работает, но заставляет меня использовать цифры или символы назад. Я не хочу этого. например, пароль testABC55 $$ действителен, но я этого не хочу.

Вместо этого я хочу, чтобы тест $ ABC5 # 8 был действительным. Таким образом, в основном цифры / специальные символы могут быть одинаковыми или diff -> но должны быть разделены в строке.

PHP-код:

$uppercase = preg_match('#[AZ]#', $password); $lowercase = preg_match('#[az]#', $password); $number = preg_match('#[0-9]#', $password); $special = preg_match('#[\W]{2,}#', $password); $length = strlen($password) >= 8; if(!$uppercase || !$lowercase || !$number || !$special || !$length) { $errorpw = 'Bad Password'; 

Используя «читаемый» формат (его можно оптимизировать, чтобы быть короче), так как вы новичок в regex >>

 ^(?=.{8})(?=.*[AZ])(?=.*[az])(?=.*\d.*\d.*\d)(?=.*[^a-zA-Z\d].*[^a-zA-Z\d].*[^a-zA-Z\d])[-+%#a-zA-Z\d]+$ 

Добавьте свой специальный набор символов к последнему [...] в приведенном выше регулярном выражении (теперь я ставлю только – +% # ).


Объяснение:

 ^ - beginning of line/string (?=.{8}) - positive lookahead to ensure we have at least 8 chars (?=.*[AZ]) - ...to ensure we have at least one uppercase char (?=.*[az]) - ...to ensure we have at least one lowercase char (?=.*\d.*\d.*\d - ...to ensure we have at least three digits (?=.*[^a-zA-Z\d].*[^a-zA-Z\d].*[^a-zA-Z\d]) - ...to ensure we have at least three special chars (characters other than letters and numbers) [-+%#a-zA-Z\d]+ - combination of allowed characters $ - end of line/string 
 ((?=(.*\d){3,})(?=.*[az])(?=.*[AZ])(?=(.*[!@#$%^&]){3,}).{8,}) 

test $ ABC5 # 8 недействителен, потому что вы запрашиваете более двух цифр и специальных символов

 AZ az 0-9 > 2 special chars > 2 string length >= 8 

Для соответствия длины строки, включая специальные символы:

$ result = preg_match ('/ ^ (? =. [az]) (? =. [AZ]) (? =. \ d) (? =. [^ A-Za-z \ d]) [\ s \ S] {6,16} $ / ', $ string);

Ответ объяснен: https://stackoverflow.com/a/46359397/5466401