我曾想过使用preg_match()来检查是否正确输入了密码。我想要至少1个大写字母,至少1个小写字母,至少一个数字,以及至少一个特殊字符。这是我正在使用的:
$pattern = "(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$";
这个正则表达式在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中的设置有一些缺陷。谁能看到我错过的东西?
答案 0 :(得分:3)
PHP正则表达式也需要正则表达式分隔符,因此请使用:
$pattern = '/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/';
答案 1 :(得分:2)
使用以下模式:
$ strong_password = preg_match(' / ^(?=。 [az])(?=。 [AZ])(?=。 \ d )(?=。 [^ A-Za-z \ d])[\ s \ S] {6,16} $ /',$ string);
^ --> start of string
(?=.*[a-z]) --> at least one lowercase letter
(?=.*[A-Z]) --> 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
答案 2 :(得分:-1)
为每个条件加上+号要求至少有一个以下格式的字符:
$pattern = '/^(?=.*\d+)(?=.*\W+)(?=.*[A-Z]+)(?=.*[a-z]+)[a-zA-Z\d\W]{8,}$';
并在此处进行测试:https://regex101.com/r/mSWcPK/1/