2009-05-19 41 views
0

我試圖用正則表達式解析電話號碼。正是我想要使用的功能像這樣得到與電話號碼的字符串它:使用正則表達式與非捕獲組解析數字

string phoneRegex = @"^([+]|00)(\d{2,12}(?:\s*-*)){1,5}$"; 
string formated = Regex.Match(e.Value.ToString(), phoneRegex).Value; 

正如你可以看到我想要使用非捕獲組(:\ S * - *?),但我我做錯了什麼。

預期resoult應該是:

輸入(e.Value):48 123 234 344或48 123234344或48 123-234-345

輸出:48123234344

由於提前提出任何建議。

回答

2

Regex.Match不會爲您更改字符串;它會簡單地匹配它。如果你有一個手機串號,並希望通過刪除不想要的字符來格式化它,你將要使用的方法Regex.Replace:

// pattern for matching anything that is not '+' or a decimal digit 
string replaceRegex = @"[^+\d]"; 
string formated = Regex.Replace("+48 123 234 344", replaceRegex, string.Empty); 

在我的示例中的電話號碼是硬編碼的,但它只是演示目的。

作爲一個側面說明;上面代碼示例中的正則表達式假定國家代碼是2位數;這可能並非如此。美國有一位數的代碼(1),許多國家都有3位數的代碼(也許有些國家的數字也比這個數字多?)。

+0

你說得對,我想我只是希望多從正則表達式:P ..是的,我正在努力使電話號碼格式國際(不同國家代碼支持稍後在代碼中)。 – kyrisu 2009-05-19 09:36:13

0

這應該工作:

Match m = Regex.Match(s, @"^([+]|00)\(?(\d{3})\)?[\s\-]?(\d{3})\-?(\d{4})$"); 
return String.Format("{0}{1}{2}{4}", m.Groups[1], m.Groups[2], m.Groups[3], m.Groups[3]);