我的正则表达不是突然工作?

时间:2016-11-28 22:56:28

标签: php regex

我有一个正在测试的正则表达式,我正在测试我的注册表单,正则表达式几天前工作完美,现在突然间,即使我匹配正确的客户端和传递形式的正则表达式(相同的正则表达式然后服务器端正在吐出else语句,说我现在每次都不匹配正则表达式。有什么线索吗?

$usern = $_POST['username'];
$regex = '(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{3,}';

$Access = preg_match($regex, $usern);

if($Access) 
{
   //database stuff here
}
else
{
   echo "You filled the form out incorrectly!";
}

1 个答案:

答案 0 :(得分:0)

主要问题是缺少分隔符,但作为最佳做法,添加^锚点也是一个好主意:

$regex = '~^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{3,}~';

验证正则表达式通常是以principle of contrast为基础构建的,当您重写它时,正则表达式更有效

$regex = '~^(?=\D*\d)(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z]).{3,}~';

因此,正则表达式将(in)更快地验证输入,而不会在前瞻中由.*引起冗余回溯。