2016-11-16 35 views
0

括號我做了一個正則表達式匹配諸如這些電話號碼:比賽只收盤

555-555-5555 
(555)555-5555 
(555) 555-5555 
555 555 5555 
5555555555 
1 555 555 5555 

它的工作原理。但我不希望在不右括號這樣的匹配數字:

555) 555-5555 

這是我的正則表達式:

^(1{1})?(\ |-)?(\()?([0-9]{3})(\ |\)|\-)?(\ |\)|\-)?([0-9]{3})(\ |-)?([0-9]{4})$ 

我該怎麼辦呢?

+0

這將幫助你大量http://www.regular-expressions.info/conditional.html – Gavin

+0

'{1}'是多餘的。 – melpomene

+0

你使用什麼編程語言或文本編輯器? –

回答

0

必須滿足兩個支架沒有括號:

(\(\d{3}\)|\d{3}) 

一起:

^1?[ -]?(\(\d{3}\)|\d{3})[ -]?\d{3}[ -]?\d{4}$ 

...不必要的括號去掉,更簡單的字符類添加。

請參閱demo

0

您的正則表達式將應用於哪種類型的內容?

因爲您可能有不同的解決方案。

如果您所在的字段只包含電話號碼,並且想驗證它們,那麼您可以首先刪除除數字之外的所有字符,並且具有很好的工作價值。

0

只是把我的兩分錢中:

(?:(?=\(\d+\))|(?!.*\))) 
^[\d-()]+$ 

a demo on regex101.com
或者,在匹配之前,只需替換()即可。