0
function sendSms($toPhone,$message){
    $toPhone=intval(trim($toPhone));
    if(strlen($toPhone)== 8 && $toPhone{0}==9){

                    //sending sms

    }else{
        return "error";
    }

}

我正在尝试验证用于发送 SMS 的手机号码。第一行修剪电话号码字符串,然后将其转换为整数。在if语句中,我想确保数字长度为 8 位并且以 9 开​​头。else即使数字正确(8 位并以 9 开​​头),此功能也始终适用。这里可能是什么问题。

4

4 回答 4

2

为什么不是正则表达式?

$valid = preg_match('/^9[0-9]{7}$/', trim($phone));
于 2012-12-29T13:17:00.330 回答
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";
    }    
}
于 2012-12-29T13:21:11.023 回答
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"

无论如何,将整数转换为整数并不是一个好主意,因为用户输入的数字之间可能有空格或像+and之类的符号/。更好地搜索现有的方法来验证电话号码。

看看这里,其中更详细地介绍了“验证手机号码”主题:电话号码验证的综合正则表达式

于 2012-12-29T13:22:50.070 回答
0

您将变量转换为整数,显然 $toPhone[0] 仅适用于字符串。

没有 intval() 的相同功能可以按您的意愿工作。

function sendSms($toPhone, $message)
{
    $toPhone = trim($toPhone);
    if(strlen($toPhone) == 8 && $toPhone[0] == 9){
        //sending sms
    } else {
        return "error";
    }
}
于 2012-12-29T13:20:29.213 回答