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"

とにかく、整数を整数に変換するのは得策ではありません。なぜなら、ユーザーは数字の間にスペースを入れたり、 や などの記号を入力したりする可能性があるから+です/。電話番号を検証するための既存のアプローチをより適切に検索します。

「携帯電話番号の検証」というトピックが詳しく説明されているこちらをご覧ください:電話番号検証のための包括的な正規表現

于 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 に答える