2014-11-05 77 views
1

幫我寫一個正則表達式如下條件正則表達式來驗證電話號碼

  1. 數目可以使用+
  2. 號不能啓動 - 或。但不是()和/
  3. 數量可以開始0
  4. 字符串中
  5. 民人數應​​爲9位數字不包括擴展的細節和開始在電話號碼字段不能達到超過14排除+ +
  6. 最大數量
  7. 如果字符串包含前/ EXT/X則之後不應該有多於5個字符(通常爲4)以下

    0-1234-123456 
    +91-1234-56789012 
    +91-1234-56789012 x1234 
    +91-1234-56789012 ex1234 
    +91-1234-56789012 ext12345 
    +91-1234-56789012x1234 
    +91-1234-56789012ex1234 
    +91-1234-56789012ext12345 
    91-1234-56789012 
    91-1234-56789012 x1234 
    91-1234-56789012 ex1234 
    91-1234-56789012 ext12345 
    91-1234-56789012x1234 
    91-1234-56789012ex1234 
    91-1234-56789012ext12345 
    91123456789012 
    91123456789012 x1234 
    91123456789012 ex1234 
    91123456789012 ext12345 
    91123456789012x1234 
    91123456789012ex1234 
    91123456789012ext12345 
    91.1234.56789012 
    91.1234.56789012 x1234 
    91.1234.56789012 ex1234 
    91.12345.6789012 ext12345 
    91.12345.6789012x1234 
    91.12345.6789012ex1234 
    91.12345.6789012ext12345 
    1-234-567-8901 
    1-234-567-8901 x1234 
    1-234-567-8901 ext1234 
    1 234 567-8901 
    1.234.567.8901 
    12345678901 
    
    數字

此以上應滿足的例子

,我發現幾個鏈接在網上其中之一是 http://ericholmes.ca/php-phone-number-validation-revisited/

和計算器

A comprehensive regex for phone number validation

^(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:\(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?$ 

不工作了很多上述

+0

你說號碼可以包含 - 或。但不是()和/。但是你的清單有'1(234)567-8901'的例子。這是一個錯誤嗎? – Taemyr 2014-11-05 12:59:29

+0

更新謝謝taemyr – 2014-11-05 13:03:48

+0

這是一個錯誤對不起Taemyr,我更新了我的錯誤 – 2014-11-05 13:45:10

回答

3
^\+?(\d[.\- ]*){9,14}(e?xt?\d{1,5})?$ 

說明;

  • ^斷言串的開始
  • \+?匹配9個14個位數,可能通過空間,點,或短劃線分隔之間的可選加
  • (\d[.\- ]*){9,14}
  • (e?xt?\d{1,5})?可選地,x可能前面是e或後面跟着t。這些字母總是跟着1到5之間的數字。
  • $斷言字符串
+0

謝謝Taemyr,這個作品也是。和更短 – 2014-11-05 14:28:44

+0

@YellowandRed那麼,我騙了。在看過GuyH之後我更新了我的答案。 - 因爲我最初是以一種相當愚蠢的方式寫的。 – Taemyr 2014-11-05 14:31:03

+0

你之前更新的那個沒有爲我工作,但GuyH的工作。現在它的GuyH不工作。但我不得不欣賞他的努力。也謝謝你。 – 2014-11-05 14:33:50

1

這將做到這一點的結束,但根據其語言你是編程的(我們總是需要知道與regexs,所以如果這不會爲你工作,回覆)

您的條件5(電話號碼中最多14個字符)出現錯誤,因爲您的幾個示例包含16個字符(如果它們包含點或連字符) 。無論如何,這並不會檢查整個事物的整體長度,因爲其他長度檢查是這樣的;它需要第二個正則表達式,或者,更好的是事先檢查字符串長度(例如,在PHP中,通過調用strlen)。

您可能希望允許分機號碼的空格,例如分機1234;如果是這樣,請在適當的地方添加\ s *。

我希望這會有所幫助。

^\+?\d[\d-\.\s]{8,15}\s?((ext|ex|x)\d{3,5})?$ 
+0

規則2規定罰款是非法的,編輯已將其從列表中刪除。 – Taemyr 2014-11-05 13:30:47

+0

條件4和5狀態限制數字位數,而不是字符數。 – Taemyr 2014-11-05 13:32:51

+0

完美而真棒 – 2014-11-05 13:44:29

相關問題