如何知道哪个变量有值,哪个为空?

Posted

技术标签:

【中文标题】如何知道哪个变量有值,哪个为空?【英文标题】:How to know which variable has a value and which one is null? 【发布时间】:2018-05-31 00:34:52 【问题描述】:

我需要验证一个输入,稍后我需要对照数据库检查它是否存在于表中。输入必须是手机号码(所有数字,最大长度为 10)或电子邮件地址。以下是我所做的

<?php

$credential = '9999999999';

if (ctype_digit($credential)) 
        $mobile_number = $credential;
        echo 'Mobile: '. $mobile_number;
     elseif (filter_var($credential, FILTER_VALIDATE_EMAIL)) 
        $email = $credential;
        echo 'Email: '.$email;
    

输出$credential = '9999999999';

Mobile: 9999999999

输出$credential = 'abc@gmail.com';

Email: abc@gmail.com

两个问题,

    有没有更好的方法?比如,使用 preg_match。

    上面的代码设法区分了电子邮件和手机号码,稍后我需要与数据库进行匹配。在实际场景中,输入将由用户提供,$credential = $_POST['credential'];,然后将相应地设置两个变量中的任何一个。我如何知道设置了两个变量中的哪一个?如果我要将电子邮件匹配到电子邮件列或将手机号码匹配到移动列,我需要知道这两者中哪一个有值,哪一个为空。

【问题讨论】:

如果两个条件都不返回真,你在做什么? ...好吧,你走了,我也走了。 @mickmackusa,嘿,谢谢你的回复,对不起,不得不走了。这不是确切的代码,而是我想提出的一个想法,验证也没有达到生产的标准,这个想法是有一个 10 位数的手机号码(中间没有空格,两端修剪)或有效的电子邮件。如果匹配良好,则回显未找到记录。 【参考方案1】:

filter_var($credential, FILTER_VALIDATE_EMAIL) 将比正则表达式表现更好,因为这是它专门设计的。

至于电话号码,这似乎有点生疏或过于严格。许多人不加思索地添加空格、括号、连字符等。我认为,对电话号码如此严格只会令人恼火。 SO上有很多关于电话号码验证的正则表达式模式。需要对您预期的电话号码字符串有深入的了解才能自信地回答这个问题。您只期待美国的数字吗?这是国际的吗?我们不知道,所以我不能说什么是最好的策略。

这将起作用:

if (ctype_digit($credential) && strlen($credential)==10) 
    $mobile_number = $credential;
    echo 'Mobile: '. $mobile_number;
 elseif (filter_var($credential, FILTER_VALIDATE_EMAIL)) 
    $email = $credential;
    echo 'Email: '.$email;

这也可以:

if (preg_match('/^\d10$/',$credential)) 
    $mobile_number = $credential;
    echo 'Mobile: '. $mobile_number;
 elseif (filter_var($credential, FILTER_VALIDATE_EMAIL)) 
    $email = $credential;
    echo 'Email: '.$email;

这两种方法之间的速度差异对于您的用户来说是完全不会注意到的。您应该选择您个人喜欢的方法。

【讨论】:

第二个问题?代码如何知道哪个 $variable 有值?比如说,如果提供了电子邮件,我想对照电子邮件列检查它,或者如果手机没有。提供,将其与表/数据库中的移动列匹配。 您可以在此 if/elseif 块中构造您的查询,也可以在脚本中稍后编写 if (!$email)...【参考方案2】:

感谢您回答我的第一个问题。对于第二部分,如果您有兴趣,我发现了这个http://php.net/manual/en/function.is-null.php(未经测试)。

【讨论】:

对于问题 2:考虑使用isset($xxx)empty($xxx)。如果变量不存在,is_null($xxx) 将触发 E_NOTICE 错误日志。【参考方案3】:

这就是使用 PHP 的方法

if (preg_match('/^\d10$/', $string) || filter_var($string, FILTER_VALIDATE_EMAIL)) 
    //valid
 else 
    //invalid

但是,您也应该在客户端验证这一点,以确保如果值无效,甚至不会将请求发送到服务器。

编辑:

if (preg_match('/^\d10$/', $string)) 
    //valid mobile
 else if (filter_var($string, FILTER_VALIDATE_EMAIL)) 
    //valid email
 else 
    //invalid

【讨论】:

我也会在客户端...我的第二个问题? @Mecom 如果您有手机号码,在 else 如果您有电子邮件。

以上是关于如何知道哪个变量有值,哪个为空?的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL:根据哪个为空,选择两个字段之一

JPA:我应该使用哪个?基本(可选)或列(可为空)?

php 中 判断数组中是不是有值

文本字段为空,即使其中有值

C#读取泛型变量的值

PHP如何判断一个变量是不是有值,有值则不变,没有值则赋值