如何确定字符串是否是PHP中的电子邮件,ID或用户名?

时间:2016-01-23 07:13:26

标签: php

我正在为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”。

5 个答案:

答案 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

检查工作http://phpfiddle.org/main/code/2z65-4rdv

答案 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";

        }