Php 我的正则表达式突然不起作用了?

Php 我的正则表达式突然不起作用了?,php,regex,Php,Regex,我有一个正则表达式,我正在测试它以验证我的注册表表单,正则表达式在几天前工作得很好,现在突然之间,即使我在表单中匹配正则表达式,该表单经过验证客户端并通过(相同的正则表达式),然后服务器端抛出else语句,说我现在每次都不匹配正则表达式。有线索吗,伙计们 $usern = $_POST['username']; $regex = '(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{3,}'; $Access = preg_match($regex, $usern); if($A

我有一个正则表达式,我正在测试它以验证我的注册表表单,正则表达式在几天前工作得很好,现在突然之间,即使我在表单中匹配正则表达式,该表单经过验证客户端并通过(相同的正则表达式),然后服务器端抛出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!";
}

主要问题是缺少分隔符,但作为最佳实践,最好添加
^
锚定:

$regex = '~^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{3,}~';
验证regexp通常是在心里构建的,当您像这样重写它时,您的regex会更加高效

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

因此,正则表达式将(in)更快地验证输入,而不会因lookaheads中的
*
而导致冗余回溯。

主要问题是缺少分隔符,但作为最佳实践,最好添加
^
锚定:

$regex = '~^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{3,}~';
验证regexp通常是在心里构建的,当您像这样重写它时,您的regex会更加高效

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

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

使用
$regex='~^(?=.*\d)(?=.[a-z])(?=.[a-z])(?=.[a-z]){3,}~-您忘记了分隔符。你是一个巫师,先生,我欠你很多时间,因为我坐在那里看着我的代码困惑、困惑、尝试、测试和工作,谢谢你manUse
$regex='~^(?=.*\d)(?=.[a-z])(?=.[a-z])-您忘记了分隔符。你是一个巫师,先生,我欠你很多时间,因为我坐在那里看着我的代码,困惑不解,尝试过,测试过,还在工作。谢谢你,伙计,它为你工作了。如果我的答案证明对你有用的话,请考虑一下投票。在获得15个代表点后,您有权向上投票。很高兴这对您有效。如果我的答案证明对你有用的话,请考虑一下投票。在获得15个代表点后,您有权对SO进行投票。