编译失败:无法在偏移19处重复(preg_match)

时间:2013-12-02 14:04:38

标签: php preg-match offset

我有以下简单的代码,用于检查密码是否包含至少两个小写。

preg_match("/^(?=.*[a-z].*[a-z])+$/")

但这给了我以下错误消息: 编译失败:无法在偏移量19重复

我无法弄清楚我错在哪里

稍后修改

以下代码检查我是否至少有两个特殊字符效果很好:

  

preg_match("/^(?=.*[!@#$%^&*].*[!@#$%^&*])[a-zA-Z_!@#%^&*]+$/"

2 个答案:

答案 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) {
}