2010-07-15 75 views
6

我知道有很多關於如何匹配某些電話號碼類型的正則表達式示例。對於我的例子,我只想讓數字和一些特殊字符。實現這一點我再次遇到困難。正則表達式 - 簡單的電話號碼

電話號碼應允許可以採取這些形式

5555555555 
555-555-5555 
(555)5555555 
(555)-555-5555 
(555)555-5555 and so on 

我想要的東西,這將使[0-9],也特殊字符「(」,「)」和「 - 」

到目前爲止我的表情看起來像這樣

/^[0-9]*^[()-]*$/ 

我知道這是錯誤的,但邏輯上,我相信,這意味着允許數字0-9或者並允許字符(,)和 - 。

+0

我也建議搜索的字符。並且+因爲這兩者很多時候用於輸入國家代碼或只是不同的風格。我之前使用過的另一個選項是去除所有非數字,然後檢查數字的正確長度。另外,我很高興你這樣做。對於許多網站或程序來說,這會讓你陷入特定的格式,而電腦可以輕鬆檢查! – christophercotton 2010-07-15 14:49:50

+0

[電話號碼驗證綜合正則表達式]的可能重複(http://stackoverflow.com/questions/123559/a-comprehensive-regex-for-phone-number-validation) – Mark 2012-01-17 15:33:05

回答

4

這場比賽你想要什麼樣的數字,(,)和 -

/^[0-9()-]+$/ 
+0

謝謝!工作 – IamBanksy 2010-07-15 14:41:27

+0

爲此,我想允許空格和+ m標誌也。如+91 555 555 555.你能不能給我一個好的建議。 – chandu 2014-07-11 14:08:38

+0

這幾乎是我想要的,但我想強制以數字結尾 – 2017-03-07 21:44:19

1

爲什麼你在那裏有一個流浪^?我認爲你的意思是[()-]這實際上使得你必須在正則表達式中有兩個開始字符串,這永遠不會匹配。

另外,\d是一個很好的快捷方式[0-9]。他們完全一樣。

此外,這將只匹配一堆數字,然後一堆()-。類似於:1294819024()()()()()-----()-會匹配。我認爲你希望整個事情能夠重複,例如:^(\d*[()-]*)*$。現在,你可以匹配這個重複序列。 [\d()-]*

+0

[^() - ]是否意味着不匹配這些字符? – christophercotton 2010-07-15 14:51:31

+0

是的!沒有想直... – 2010-07-15 14:57:53

5
^(\(\d{3}\)|\d{3})-?\d{3}-?\d{4}$ 
  • \(\d{3}\)|\d{3}三個數字有:現在

    ,注意到嵌套*通常是低效的,我們可以知道,我們只是想匹配任何你想要的數字和標點符號是很重要的或沒有() - 更簡單的正則表達式將是\(?\d{3}\)?,但這將允許(555-5555555555)5555555

  • 可選的-後跟三位數字
  • 可選-其次是四位數字

注意,這將仍然允許555555-5555555-5555555 - 我不知道,如果這些都屬於你部分

+0

謝謝你這是正確的我認爲我的問題沒有措辭正確。我不需要在數字上指定一個特定的長度來允許外國電話號碼等,謝謝。 – IamBanksy 2010-07-15 14:42:21

0

對於數字你可以使用\d。對於多個數字,您可以使用\d{n},其中n是您想要匹配的位數。一些特殊字符必須被轉義,例如\(匹配(。例如:\(\d{3}\)\-\d{3}\-\d{4}匹配(555)-555-5555。

0

第二個克拉(afaik)將打破你所做的任何事情,因爲它意味着「字符串的開始」。

你看起來是被要求因此是:

  • 字符串的開始,接着...
  • 任意數量的數字字符,然後...
  • 開始字符串,接着...
  • 任意數量的 '(', ')',或 ' - ' 的字符,接着...串的

即使第二個克拉沒有任何作用,它也不起作用,因爲在第一個'(',')'或' - '之後,你沒有考慮任何東西,事實上可能只驗證一個空的如果是這樣的話。

你想/^[0-9()-]+$/爲一個非常粗糙的模式,將「工作」。

0

如果你正在做美國僅號碼最好的解決辦法是去掉所有的非數字字符,然後只是測試,看看如果長度== 10