2011-06-27 53 views
0

我只是在學習正則表達式,所以我可以在這個主題上使用一些關於驗證電話號碼的幫助。preg_match如何否定電話號碼中的前面的零?

我有一個電話輸入被分成一個選擇列表,國家代碼前加一個+符號。如果用戶忘記刪除電話號碼中的前一個零,則不符合E.164國際標準(然而,有少數國家是該規則的例外,即意大利,挪威等)。但大多數人需要省略有效國際電話號碼的零。

在我雖然有限的研究,我已經意識到,電話號碼格式在世界各地差異很大。這意味着驗證需要鬆散而不是嚴格,並允許破折號,空格,括號,圓點和正斜槓的任意組合作爲數字之間的分隔符。爲了符合E.164標準,分隔符將被替換爲空字符串,以給出如下示例結果:+44755222333

這是我迄今爲止嘗試驗證任何數字的嘗試。

preg_match('/^(?:[0-9][.\-\(\)\s]*)/$', $phonenumber); 

你如何構成一個正則表達式來否定前述零即在字符串字符0或00的存在返回一個錯誤匹配,加上的靈活性,以驗證任何可能的電話號碼符號?

此致,爲什麼

P.S只是爲了檢查。 「無零」規則是否也適用於NANP號碼?我這樣問是因爲我認爲這裏的大多數人都熟悉這種電話號碼系統。

+0

你要像一個號碼'044755222333'返回false不匹配或者你想第一個0或00 –

+0

後的每一件事無零規則也適用於NAND編號 – jpiasetz

+0

很高興知道。謝謝! – why

回答

2

您可以使用preg_replace脫光前導零:

$phonenumber = preg_replace('/^0+/','',$phonenumber); 

這將從字符串的前面刪除一個或多個零。 (如果你只想刪除一個零,然後刪除加號)。

希望有所幫助。

+0

謝謝你以不同的方式解決問題。不過,我想知道,如何在preg_match中否定前一個零來驗證輸入字符串? – why

0

如何:

$number = '044567565'; 
preg_match('/^0{0,2}(([0-9]*[.\-\(\)\s]*)*)/', $number, $match); 
print_r($match); 

結果:

array(
    [0] => 044567565 
    [1] => 44567565 
    [2] => 
)