我正在为PHP管理面板编写成员搜索表单。搜索条件有一个字段,我希望脚本确定是否应该在数据库中搜索电子邮件地址,用户名或ID。即使我输入了ID或电子邮件,我当前的脚本也会返回该列为“display_name”的列。我做错了什么?
$criteria = "billgates@microsoft.com";
if(!preg_match("^([0-9]+)^", $criteria)){
if(!preg_match("^([a-zA-Z0-9 ]+)^", $criteria)){
if(!preg_match("^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)^", $criteria)){
$this->error = "Your search criteria of '".$criteria."'' is not a valid display name, email address, or ID.";
} else {
$column = "email_address";
}
} else {
$column = "display_name";
}
} else {
$column = "user_id";
}
echo $column;
以上将产生“display_name”。
答案 0 :(得分:2)
您好,您可以尝试这个解决方案。它对我有用。
<?php
$criteria = "billgates@microsoft.com";
if(!is_numeric($criteria)){
if(filter_var($criteria, FILTER_VALIDATE_EMAIL)){
$column = "email_address";
} else {
$column = "display_name";
}
} else {
$column = "user_id";
}
echo $column;
?>
答案 1 :(得分:0)
你的正则表达式正在使用&#34; ^&#34;作为分隔符。事实上的标准分隔符是&#34; /&#34;。并且&#34; ^&#34;匹配字符串的开头。如果你想匹配结束,那么你需要使用&#34; $&#34;。当然,在分隔符内部。
答案 2 :(得分:0)
您的products.ProductOffers.ProductOfferId = offers.OfferId.
正则表达式中几乎没有错误。检查下面的代码。
preg_match
答案 3 :(得分:0)
$criteria = "billgates@microsoft.com";
if(!filter_var($criteria, FILTER_VALIDATE_EMAIL) === false)
$column = "email_address";
else if(is_numeric($criteria))
$column = "display_name";
else
$column = "user_id";
echo $column;
答案 4 :(得分:-1)
所以我得出了我的结论,其中使用了一些人的反应。我没有使用正则表达式,而是使用PHP函数is_numeric,ctype_alnum和过滤器来验证电子邮件,同时保持旧代码的相同结构。我不想通过说如果字符串不是ID或电子邮件来消除显示名称的验证,那么它就是显示名称。这是因为显示名称遵循某种格式,并且可以使用该方法输入任何旧字符串。这就是我想出的......
if(!is_numeric($criteria)){
if(!ctype_alnum($criteria)){
if(!filter_var($criteria, FILTER_VALIDATE_EMAIL)){
$this->error = "Your search criteria of '".$criteria."'' is not a valid display name, email address, or ID.";
} else {
$column = "email_address";
}
} else {
$column = "display_name";
}
} else {
$column = "user_id";
}