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