编程语言
首页 > 编程语言> > php – 如何知道哪个变量有值,哪个变量为null?

php – 如何知道哪个变量有值,哪个变量为null?

作者:互联网

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

<?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’];然后相应地设置两个变量中的任何一个.我如何知道设置了哪两个变量?如果我要将电子邮件与电子邮件列或移动电话号码匹配到移动列,我需要知道两者中哪一个有值,哪一个为空.

解决方法:

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('/^\d{10}$/',$credential)) {
    $mobile_number = $credential;
    echo 'Mobile: '. $mobile_number;
} elseif (filter_var($credential, FILTER_VALIDATE_EMAIL)) {
    $email = $credential;
    echo 'Email: '.$email;
}

两种方法之间的速度差异对用户来说完全没有意义.你应该选择你个人喜欢的方法.

标签:php,phone-number,email,validation
来源: https://codeday.me/bug/20190527/1162813.html