2013-05-10 68 views
1

我想爲我的代碼寫一個正則表達式,正則表達式用於驗證電話號碼格式,前兩位數字應該是01,04,05,06,07,08, 09後面跟着一個短劃線( - ),後面跟着6位數字。正則表達式PHP沒有正確驗證

我使用了以下正則表達式:0[1456789]{1}-[0-9]{6}。 我用下面的網站,以確保我的正則表達式工作正常:RegExr,我在下面的01-123456

測試它。然而,當我運行我的代碼,我的函數返回如果該號碼是無效的,這是不。

這裏是我的代碼:

function validHomePhone() { 
    global $home_phone; 

    $home_phone_regex = "0[1456789]{1}-[0-9]{6}"; 
    return preg_match($home_phone_regex, $home_phone); 
} 

爲什麼會出現這樣的結果?

+6

你不需要在你的正則表達式分隔符? – andrewsi 2013-05-10 13:35:52

+2

我也想推薦一個正則表達式'/ 0 [14-9] - \ d {6} /'的簡化版本。 – Joe 2013-05-10 13:37:28

回答

7

您需要附上在delimiter表達,就像這樣:

/0[1456789]{1}-[0-9]{6}/ 

您還應該添加的開始和結束的字符串錨,否則你的表現將匹配任何包含一個有效的數字:

/^0[1456789]{1}-[0-9]{6}$/ 

雖然我們「在它重新的{1}量詞是多餘的:

/^0[1456789]-[0-9]{6}$/ 

最後,[1456789]可以簡化爲[14-9]。就我個人而言,我不會這樣做,因爲恕我直言,它減少了可讀性而沒有真正的收益,但它可能在其他地方有用。

+3

另外你的函數應該使用一個參數$ home_phone,而不是全局的$ home_phone函數validHomePhone($ home_phone)並擦除全局行。 – beiller 2013-05-10 13:38:35

+0

我剛開始和結束時只是用'/'試過,但沒有用'^'和'$'嘗試,我雖然沒有它們,但不需要它們 感謝Jon – 2013-05-10 13:38:38

+1

@ aizen92:還要注意上面的beiller的評論,他的200%是正確的。 – Jon 2013-05-10 13:40:12