我有以下代码,这使得一些不正确的正则表达式:
$newPw = 'aaaAAAaaA';
$low = preg_match("/^(?:.*[a-z].*[a-z])+$/", $newPw); // at least two lowercases
$up = preg_match("/^(?:.*[A-Z])+$/", $newPw); // at least one uppercase
$sc = preg_match("/^(?:.*[!@#$%^&*].*[!@#$%^&*])+$/", $newPw); // at least two special characters
if (!$low) {
echo 'Password must contain at least two lowercases';
} else if (!$up) {
echo 'Password must contain at least one uppercase';
} else if (!$sc) {
echo 'Password must contain at least two special characters';
} else echo 'ok';
问题是我的preg_matches只裁掉了最后一个字符。例如,如果 $ newPw 是 aaA ,它会要求两个lowecases,但是如果 $ newPw aaAa 它要求一个upercase.Both中的两个都错了,我无法确定问题在哪里。
首先,我将所有preg_matches组合在一个大的preg_match中。在我拆分后,它返回错误
已解决这很简单,我感到很惭愧。解决方案是从头开始删除 ^ ,从结尾删除 + $ 每个preg_match。
答案 0 :(得分:1)
两个小写字符的模式:
/.* [A-Z] +。* [A-Z] + /
如果至少有两个小写字母,这将返回整个字符串,但我想这不是问题因为你只检查它是否为真;
问题在于括号后面没有任何量词(+ = 1或更多),因此正则表达式定义被检查的次数不明确([az] lowercahse字符类定义)。外部括号是不必要的,因为我们现在不需要子模式。
至少一个大写字母的模式:
/.* [A-Z] +。* /
同样适用,它返回整个字符串,但前提是它至少有一个大写字母。
至少两个特殊字符的模式:
/.* [@#$%^&安培;!*] + * [@#$%^&安培;!*]。。+ * /
我喜欢使用此站点预测一些PHP函数(链接到preg_match):
http://www.functions-online.com/preg_match.html
我认为它有时真的很有帮助。 我希望我能帮忙!