Laravel正则表达式模式始终返回false

时间:2018-09-17 08:13:55

标签: regex laravel pattern-matching

我想实现密码验证,因此我在Laravel 5项目中编写了以下函数:

public function isValidPassword($password) {
   return preg_match_all('$S*(?=S{8,20})(?=S*[a-z])(?=S*[A-Z])(?=S*[d])(?=S*[W])S*$', $password) ? true : false;
}

现在,我想检查函数返回true还是false。

if($this->isValidPassword($request->newPassword) == false){
  // $message = 'error';
} else { // $message = 'success'; }

我在密码字段中输入“ NqUeeDF45 $ t”,它返回false。

我尝试了所有可能的字符串,但似乎函数始终返回false。我的正则表达式模式错误吗?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

PHP在正则表达式周围需要定界符(斜杠最常用,但是其他字符也可以):

/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$_!%*?&-]{8,20}$/

您可能将前导^更改为$,以消除“缺少定界符”错误,从而更改了正则表达式的含义。