我有一个正在测试的正则表达式,我正在测试我的注册表单,正则表达式几天前工作完美,现在突然间,即使我匹配正确的客户端和传递形式的正则表达式(相同的正则表达式然后服务器端正在吐出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!";
}
答案 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)更快地验证输入,而不会在前瞻中由.*
引起冗余回溯。