function sendSms($toPhone,$message){
$toPhone=intval(trim($toPhone));
if(strlen($toPhone)== 8 && $toPhone{0}==9){
//sending sms
}else{
return "error";
}
}
我正在尝试验证用于发送短信的手机号码。第一行修剪电话号码字符串,然后将其转换为整数。在if
语句中,我想确保数字长度是8位数,它以9开头。即使数字正确(8位数字,也是从数字开始),此函数始终为else
。 9)。这可能是什么问题。
答案 0 :(得分:2)
为什么不使用正则表达式?
$valid = preg_match('/^9[0-9]{7}$/', trim($phone));
答案 1 :(得分:1)
您可以从$ toPhone中删除所有不是数字
function sendSms($toPhone,$message){
$_phone = '';
for ($i = 0; $i < strlen($toPhone); $i++)
{
if (is_numeric($toPhone[$i]))
$_phone .= $toPhone[$i];
}
if(strlen($_phone)== 8 && $_phone[0]=='9'){
//sending sms
}else{
return "error";
}
}
答案 2 :(得分:1)
将电话号码转换为$toPhone=intval(trim($toPhone));
的整数后,您无法以$toPhone{0}
,尝试的方式访问数字,因为您使用数字进行操作不再是字符串。
见这个孤立的例子:
$number = 987654321;
var_dump($number{0}); //NULL
然而,substr
能够做到这一点:
$number = 987654321;
var_dump(substr($number, 0, 1)); //string(1) "9"
将整数转换为整数并不是一个好主意,因为用户可能会输入中间带空格的数字或+
和/
等符号。更好地搜索已有的验证电话号码的方法。
请看这里,更详细地介绍“验证手机号码”主题:A comprehensive regex for phone number validation
答案 3 :(得分:0)
您将变量转换为整数,显然$ toPhone [0]仅适用于字符串。
没有intval()的相同函数可以正常工作。
function sendSms($toPhone, $message)
{
$toPhone = trim($toPhone);
if(strlen($toPhone) == 8 && $toPhone[0] == 9){
//sending sms
} else {
return "error";
}
}