整数运算的问题

时间:2012-12-29 13:12:50

标签: php

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)。这可能是什么问题。

4 个答案:

答案 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";
    }
}