使用preg_match识别强密码

时间:2014-08-06 17:41:23

标签: php regex html5

我曾想过使用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中的设置有一些缺陷。谁能看到我错过的东西?

3 个答案:

答案 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/