2012-10-01 48 views
3

可能重複:
A comprehensive regex for phone number validation正則表達式可選空格

我非常接近一個完整的正則表達式,我需要。但我似乎無法獲得可選的空白空間。

的Regex

^(\(?\d{3}\)?\-?\d{3}\-?\d{4})$ 

要求 - 僅這四個

111-111-1111 - 作品

(111)111-1111 - 作品

(111)111-111 - 不捕獲

1111111111 - Works

如何在括號之後添加可選空間?

+4

您是否嘗試過? – claesv

+0

我通常所做的是去除非數字字符,並確保長度爲10.然後將10位數字串格式化爲我相信它應該在數據庫中。 – Matthew

+0

我必須遵守嚴格的規則,我只給出了4種格式。 – Adam

回答

4

如何\(?\b[0-9]{3}\)?[-. ]?[0-9]{3}[-. ]?[0-9]{4}\b它匹配3334445555333.444.5555333-444-5555333 444 5555(333) 444 5555以及它們的所有組合。

更新

您正在運行到正則表達式的侷限性,所以醜陋的解決方案確實是:

(\d{3}-\d{3}-\d{4}|\(\d{3}\)\s?\d{3}-\d{4}|\d{10}) 

Example

+0

我不能允許所有其他組合。只是我列出的那些。 – Adam

+0

我不認爲這是可能的,因爲你想允許在同一個地方作爲破折號的空間,但只有當它在a)之後,這也需要回頭看另一個(。 –

+0

更新...很難看 –

4
^(\(?\d{3}\)*\s?\-?\d{3}\-?\d{4})$ 

* \ s表示0或1個空格字符。

編輯: 其實,我喜歡這個版本更好,因爲它允許破折號或空間,但不是兩個。另外,?指0或1,*表示0或多個:

^(\(?\d{3}\)?[\s,\-]?\d{3}\-?\d{4})$ 
+0

使用http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx時仍然無法用括號後面的空格捕獲那個? – Adam

+0

奇怪。我只是試了一下,它在你的鏈接上工作。這裏是我最初使用的工具:http://regexhero.net/tester/ –

+0

是的,我只是重新鍵入他們,並工作。很奇怪,我不確定第一次發生什麼事。 – Adam

1

Somtimes是更好地匹配整整三個表現之一: 「?」

^(\d{11}|(\d{3}-){2}\d4|\(\d{3}\) ?\d\d\d-\d\d\d)$