我有以下简单的代码,用于检查密码是否包含至少两个小写。
preg_match("/^(?=.*[a-z].*[a-z])+$/")
但这给了我以下错误消息: 编译失败:无法在偏移量19重复。
我无法弄清楚我错在哪里
稍后修改
以下代码检查我是否至少有两个特殊字符效果很好:
preg_match("/^(?=.*[!@#$%^&*].*[!@#$%^&*])[a-zA-Z_!@#%^&*]+$/"
)
答案 0 :(得分:2)
(?= )
定义了一个断言,你不能重复断言。您的意思是使用(?: )
吗?
$data = array('ab', '123a345b', '123');
foreach ($data as $subject) {
$found = preg_match("/^(?:.*[a-z].*[a-z])+$/", $subject, $match);
var_dump($found, $match);
}
输出:
int(1)
array(1) {
[0]=>
string(2) "ab"
}
int(1)
array(1) {
[0]=>
string(8) "123a345b"
}
int(0)
array(0) {
}
答案 1 :(得分:2)
试试这个
<?php
preg_match("/^(.*[a-z].*[a-z].*)$/", "2313123g123123u123", $result);
var_dump($result);
preg_match("/^(.*[a-z].*[a-z].*)$/", "65665656s656565", $result);
var_dump($result);
?>
结果
array(2) {
[0]=>
string(18) "2313123g123123u123"
[1]=>
string(18) "2313123g123123u123"
}
array(0) {
}