2010-07-21 49 views
2

基本上,輸入字段只是一個字符串。人們以各種格式輸入他們的電話號碼。我需要一個正則表達式來查找並將這些數字轉換爲鏈接。我需要一個正則表達式來將美國電話號碼轉換爲鏈接

輸入例子:

(201) 555-1212 
(201)555-1212 
201-555-1212 
555-1212 

這是我想要的東西:

<a href="tel:(201)555-1212">(201) 555-1212</a> - Notice the space is gone 
<a href="tel:(201)555-1212">(201)555-1212</a> 
<a href="tel:201-555-1212">201-555-1212</a> 
<a href="tel:555-1212">555-1212</a> 

我知道這應該不僅僅是去掉空格較爲強勁,但它是一個內部網站,我的員工從他們的iPhone訪問。所以,我願意「讓它工作」。

這裏是我迄今爲止在C#(這應該告訴你我是多麼少了解正則表達式):

strchk = Regex.Replace(strchk, @"\b([\d{3}\-\d{4}|\d{3}\-\d{3}\-\d{4}|\(\d{3}\)\d{3}\-\d{4}])\b", "<a href='tel:$&'>$&</a>", RegexOptions.IgnoreCase); 

誰能幫我解決這個或暗示更好的方式來做到這一點?

編輯:

謝謝大家。下面是我到目前爲止有:

strchk = Regex.Replace(strchk, @"\b(\d{3}[-\.\s]\d{3}[-\.\s]\d{4}|\(\d{3}\)\s*\d{3}[-\.\s]\d{4}|\d{3}[-\.\s]\d{4})\b", "<a href='tel:$1'>$1</a>", RegexOptions.IgnoreCase); 

它拿起剛纔的一切除了那些(NNN)區域代碼,有或沒有它和7位數字之間的空格。它會提取7位數字並將其連接起來。但是,如果指定了區號,則不會匹配。任何想法我做錯了什麼?

第二個編輯:

明白了現在的工作。我所做的只是從字符串的開頭刪除\b

+0

您期待什麼樣的輸入?你不能把所有的空白區域去掉嗎? – NullUserException 2010-07-21 18:34:12

+0

電話號碼有時位於大塊文字中。 – BoltBait 2010-07-21 18:36:14

回答

1

刪除[]並在每個\-周圍添加\s*(零個或多個空白字符)。

此外,您不需要轉義-。 (可以取出從\-\

說明:[abcA-Z]字符組,它匹配abc,或AZ之間的任何字符。
這不是你想要做的。


編輯

針對更新後的正則表達式:

  • 變化[-\.\s][-\.\s]+匹配任何這些字符中的一個或多個(例如,與它周圍的空格-
  • 問題是\b與空格和(之間的邊界不匹配。
+0

感謝您的正則表達式課程。你可以看看我的編輯看看還有什麼不對嗎? – BoltBait 2010-07-21 20:10:02

+0

這是關鍵。我從一開始就刪除了「\ b」,它現在正在收拾一切。 – BoltBait 2010-07-21 20:45:46

1

據我所知,沒有電話進入其他字符,那麼爲什麼不更換[^0-9]''

+0

這就是我所做的。不要試圖想到所有可能的選擇,只要忽略任何格式並獲取數字即可。 – 2010-07-21 18:46:38

1

這裏有一個正則表達式我寫了查找電話號碼:

(\+?\d[-\.\s]?)?(\(\d{3}\)\s?|\d{3}[-\.\s]?)\d{3}[-\.\s]?\d{4} 

這是非常靈活......允許多種格式。

然後,而不是殺死自己試圖用一堆後引用來替換掉空格,而是將匹配傳遞給一個函數,並根據需要去掉空格。 。

C#/。NET 應該有一個允許的功能替換參數的方法...

編輯:他們稱之爲'MatchEvaluator。這個例子使用委託,但我敢肯定,你可以使用稍微不詳細的

(m) => m.Value.Replace(' ', '') 

什麼的。在這裏從記憶中工作。

+0

謝謝。我在修改過的代碼中使用了你的「[ - \。\ s]」想法。 – BoltBait 2010-07-21 20:10:52

相關問題