2012-12-29 28 views
0
function sendSms($toPhone,$message){ 
    $toPhone=intval(trim($toPhone)); 
    if(strlen($toPhone)== 8 && $toPhone{0}==9){ 

        //sending sms 

    }else{ 
     return "error"; 
    } 

} 

我想驗證發送短信的手機號碼。第一行修剪電話號碼字符串,然後將其轉換爲整數。在if聲明中,我想確保數字長度是8位數字並以9開頭。即使號碼正確(8位數字並以9開頭),此函數始終適用於else。這裏可能是什麼問題。整數運算的問題

+0

你嘗試'如果(strlen的($ toPhone)== 8 && $ toPhone [0] == 9){' – AlecTMH

+0

@AlecTMH是的,它不工作 – Sami

+0

@AlecTMH也許是因爲'intval' – Sami

回答

2

爲什麼不是正則表達式?

$valid = preg_match('/^9[0-9]{7}$/', trim($phone)); 
+0

什麼是'7'對於?它是一個8位數的數字,它以9開頭 – Sami

+0

因爲我放置了一個9'9'文字,其後是7'{7}',其他數字範圍從0到9'[0-9]'。 – Petah

+0

它完美地工作。謝謝。 – Sami

0

您將變量轉換爲整數,顯然$ toPhone [0]僅適用於字符串。

沒有intval()的相同函數按照你的想法工作。

function sendSms($toPhone, $message) 
{ 
    $toPhone = trim($toPhone); 
    if(strlen($toPhone) == 8 && $toPhone[0] == 9){ 
     //sending sms 
    } else { 
     return "error"; 
    } 
} 
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"; 
    }  
} 
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