Php preg_match()只检查最后一个字符
我有以下代码,这使得一些不正确的正则表达式:Php preg_match()只检查最后一个字符,php,preg-match,Php,Preg Match,我有以下代码,这使得一些不正确的正则表达式: $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("/^(?:.*[!@#$%^&*].*[!@#$%^&a
$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_只匹配最后一个字符。例如,如果$newPw是aaA它要求两个小写,但是如果$newPw是aaAa它要求一个大写。这两个都是错误的,我不知道问题出在哪里
首先,我把所有的preg_比赛合并在一个大的preg_比赛中。在我分割它们之后,它返回上面的错误
解决了这太简单了,我感到很惭愧。解决方法就是从每个preg\u匹配的开头删除^,从结尾删除+$。两个小写字符的模式: /.*[a-z]+.*[a-z]+/ 如果至少有两个小写字母,这将返回整个字符串,但我想这没有问题,因为您只检查它是否为真 问题是括号后面没有任何量词(+=1或更多),因此对于regex来说,不清楚应该检查多少次类定义([a-z]较低的字符类定义)。外括号是不必要的,因为我们现在不需要子模式 至少一个大写字母的模式: /.*[A-Z]+*/ 同样,它返回整个字符串,但前提是其中至少有一个大写字母 至少两个特殊字符的模式: /.[!@$%^&*]+.[!@$%^&*]+*/ 我喜欢使用此站点预先测试一些PHP函数(链接到preg_match): 我觉得有时候真的很有帮助。
我希望我能帮忙
^.*(?=.{4,10})(?=.*\d)(?=.[a-zA-Z]).*$
?它检查整个字符串,但从开始处删除^end@JoniSalmi哦..太简单了…我太傻了。所以答案就是删除^and+$,效果很好。作为一个方面,你对密码的要求越严格(除了长度)暴力越容易。@AdiCrainic:请不要在问题标题中添加“已解决”。如果其中一个答案帮助您解决了问题,请单击左侧空白处的复选标记。如果没有一个答案是有用的,而你找到了自己的解决方案,那么就发布你自己的答案并接受它。