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

标签 php validation email phone-number

我需要验证一个输入,稍后我需要根据数据库检查它是否存在于表中。输入必须是手机号码(所有数字,最长 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

两个问题,

  1. 有更好的方法吗?比如,使用 preg_match。

  2. 以上代码设法区分电子邮件和手机号码,稍后我需要将其与数据库进行匹配。在真实场景中,输入将由用户提供,$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 - 如何知道哪个变量有值,哪个为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47855389/

相关文章:

php - mysqldump 根本不工作 :(

php - 如何限制 CakePHP 查询的输出?

php - Zend Framework 2 中的 SUBSTRING()/MID() 语句

jquery - 当用户输入时在文本区域中搜索 url,然后触发函数

ruby-on-rails - Rails 验证关联和错误消息

html - 在移动设备上隐藏某些电子邮件元素

email - Libre Office 错误 - SSL 和 gmail

php - 更新数据库中的数据并上传照片不起作用

java - 使用 Camel 发送带有自定义 MIME 消息的邮件

ruby-on-rails - 验证错误消息散列为空