2016-11-28 71 views
1

我有一个正在测试的验证我的注册表单的正则表达式,正则表达式在几天前完美工作,现在突然间,即使我匹配正确的客户端和通过(相同的正则表达式)形式的正则表达式,然后服务器端正在吐出else语句,说我每次都不匹配正则表达式。任何线索家伙?我的Regex突然不工作了?

$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

使用'$ regex ='〜^(?=。* \ d)(?=。* [az])(?=。* [AZ])。{3,}〜';' - 您忘记了分隔符。一开始就有一个主播是个好主意。 –

+0

你是一个向导先生,我欠你一大笔时间,因为我坐在那里盯着我的代码困惑和困惑,尝试,测试和工作谢谢你 –

回答

0

的主要问题是缺少分隔符,但作为最佳实践,它也是一个好主意,添加^锚:

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

验证的正则表达式通常在头脑里principle of contrast建,和你的正则表达式是当你重写它像

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

所以更高效,正则表达式会(中),验证输入速度更快,而不冗余backtra在视图中由.*引起的结果。

+0

很高兴它为你工作。如果我的回答对你有帮助,请考虑upvoting(参见[如何在堆栈溢出?](http://meta.stackexchange.com/questions/173399/how-to-upvote-on-stack-overflow)) 。 15分之后,你有权在SO上进行投票。 –