2011-05-30 114 views
3

我的話(電話號碼)可能在開始「00」或「+」。正則表達式號碼電話

實例號電話:

00xxx xx xxxxxxx 
+xxx xx xxxxxxx 
(+xxx) xx xxxxxxx 
(00xxx) xx xxxxxxx 

我:

Regex regexObj = new Regex(@"^\(?[+(]?([0-9]{3})\)?[) ]?([0-9]{2})[- ]?([0-9]{7})$"); 

if (regexObj.IsMatch(TextBox1.Text)) 
{ 
    // IF OK 
    string formattedPhoneNumber = regexObj.Replace(TextBox1.Text, "(+$1) $2 $3"); 
} 

如何把它的正則表達式?現在我只能把 「+」 和 「(」 「),」

感謝

回答

1

這個怎麼樣:

Regex regexObj = new Regex(@"^(?:\(?)(?:\+|0{2})([0-9]{3})\)? ([0-9]{2}) ([0-9]{7})$"); 

編輯:

^(?:\((?:\+|00)([0-9]{3})\)|(?:\+|00)([0-9]{3}))? ([0-9]{2})[- ]?([0-9]{7})$ 
+0

這個答案不正確匹配: 「00353)86 5551212」, 「(00353 86 5551212」, 「00353 86 5551212」 – Blazes 2011-05-30 13:11:06

+0

我發現,它匹配 「00353)86 5551212」,「( 00353 86 5551212" 。只是罰款我承認,‘+ 00xxx XX XXXXXXX’是一個問題,並相應地更新它 – Beno 2011-05-30 19:00:15

+0

但@Beno - 這不是一個有效的電話號碼... – Blazes 2011-05-31 09:17:58

1

這可以選擇匹配4個不​​同的電話前綴,後跟2個數字,後面跟7個數字。

(?:(00\d{3})|(\+\d{3})|(\(\+\d{3}\))|(\(00\d{3}\)))\s(\d{2})\s(\d{7})

1

測試與你的例子:

Regex regexObj = new Regex(@"^(?:(?:\+|00)([0-9]{3})|\((?:\+|00)([0-9]{3})\))[- ]?([0-9]{2})[- ]?([0-9]{7})$"); 

if (regexObj.IsMatch(TextBox1.Text)) 
{ 
    //IF OK 
    string formattedPhoneNumber = regexObj.Replace(TextBox1.Text, "(+$1$2) $3 $4"); 
} 

說明:

(?:\+|00)+00 - 無捕獲

(?:(?:\+|00)([0-9]{3})|\((?:\+|00)([0-9]{3})\)):+ XXX或00xxx或(+ XXX)或(00xxx),僅捕獲的數字。分離出()比賽,因此如果括號都包括在內,都必須存在一個匹配是很重要的(即(+999 99 9999999將是無效的

"(+$1$2) $3 $4":比賽要麼捕捉到第一或第二([0-9 ] {3})組而不是兩者 - 要他們在這裏結合

1

將作業到幾個步驟

的第一步有。去聖在調查剩下的數字之前撕掉+353,00 353,011 353,+353(0),00 353(0),011 353(0)或0的前綴。

Pattern: ^(\(?(?:0(?:0|11)\)?[\s-]?\(?|\+)(353)\)?[\s-]?)?\(?0?(?:\)[\s-]?)?([1-9]\d{1,4}\)?[\d\s-]+)((?:x|ext\.?|\#)\d{3,4})?$ 

使用上述模式是由$ 2中提取的「353」要知道,使用國際格式,否則承擔國家格式,如果$ 2爲空。

從$ 4中提取可選的分機號碼詳細信息並將其存儲起來供以後使用。

從$ 3中提取NSN(包括空格,連字符和括號)。

刪除這些空間,連字符和括號並使用另一更詳細的正則表達式模式以驗證由長度和初始數位的數目的NSN一部分。

不用擔心進入不匹配的支架或隨機標點用戶。目標是確保用戶輸入正確的位數來創建有效的電話號碼。提取和驗證號碼,然後使用正確的格式規則爲每個數字範圍清理用於顯示。