Использование preg_match для определения надежного пароля

Я думал использовать preg_match (), чтобы проверить, правильно ли введен пароль. Я хочу, по крайней мере, 1 прописную букву, как минимум 1 строчную букву, хотя бы одно число и по крайней мере один специальный символ. Вот что я использую:

$pattern = "(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[AZ])(?=.*[az]).*$"; 

Это регулярное выражение отлично работает в поле «шаблон» HTML. Но мне нужно убедиться, что он также проверен для старых браузеров.

Мой PHP-код:

 if (!(preg_match($pattern, $loginpassword))) {echo "Password must include one uppercase letter, one lowercase letter, one number, and one special character such as $ or %."; die;} 

Я думал, что он работает отлично, за исключением случаев, когда я использую пароль 1 @ abcdeF, он также не подходит. PHP-код, похоже, работает, но пароль никогда не совпадает, даже если он ДОЛЖЕН соответствовать шаблону. HTML5 разрешит это, так что я подозреваю, что регулярное выражение корректно, но что-то о моей настройке на PHP является ошибочным. Может ли кто-нибудь увидеть то, что мне не хватает?

PHP regex также нуждается в расшифровках регулярных выражений, поэтому используйте:

 $pattern = '/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[AZ])(?=.*[az]).*$/'; 

Используйте следующий шаблон:

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

 ^ --> start of string (?=.*[az]) --> at least one lowercase letter (?=.*[AZ]) --> at least one uppercase letter (?=.*\d) --> at least one number (?=.*[^A-Za-z\d]) --> at least one special character [\s\S]{6,16} --> total length between 6 and 16 $ --> end of string