2013-10-15 36 views
4

我試過多次爲asp.net intranet表單web表單編寫正則表達式字段驗證器。我試圖勉強沒有成功。目前我正在使用並試圖編輯的是正則表達式只適用於電話號碼和擴展

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

我需要能夠允許。

x1245 
508-555-1212 
5085551212 
508 555 1212 
508-555-1212 x1234 
5085551212 x1243 
508 555 1212 x1234 

我已經報道的唯一一個是名單上的第二個是第二個下來。

+0

  • $比賽結束 - 那裏有示例正則表達式可能會指向正確的方向。 – Tim

  • 回答

    5

    這將做到這一點。

    (\d\d\d-?\s?\d\d\d-?\s?\d\d\d\d\s?)?(x\d\d\d\d)? 
    

    或更短相當於:

    (\d{3}-?\s?\d{3}-?\s?\d{4}\s?)?(x\d{4})? 
    

    要匹配完整的電話號碼,任選與空間/破折號,並作出整件事可選的,那麼包括擴展,並做出可選了。

    +0

    +1謝謝。已測試和正在工作 – KBriz

    +1

    請注意,這也會匹配一個空字符串。 –

    +1

    關閉。您錯過了號碼和擴展程序之間的可選空間的匹配項。我用這個'(\ d {3}( - | \ s)?\ d {3}( - | \ s)?\ d {4} \ s?)?\ s?(x {1} \ d {4})? –

    4

    這樣的模式會匹配所有的輸入:

    \d{3}[- ]?\d{3}[- ]?\d{4}(x\d{4})?|x\d{4} 
    

    這將匹配:

    • 三個數字
    • 可選空間或連字符
    • 三個數字
    • 可選空格或連字符
    • 個四位數字
    • 任選組:

      • 的空間,並且一個字面x
      • 四位數字

      —或—

    • 的空間,並且一個文字x
    • 四位數字

    根據您的具體需求,您可能需要啓動(^)和結束($)錨禁止在你的模式多餘的字符(如"foo x1234 bar"):

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

    更新

    如果你想確保,三個電話號碼段之間的數字兩個隔板必須相同—例如508-555 1212不會允許—最簡單的方法是這樣的:

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

    (...)創建一個捕獲組,因爲它正好是在模式中的第一個,它被稱爲組1。 \1是反向引用,這將只匹配其在組匹配的相同字符串1.

    +0

    只有限制是這將允許'508-555 1212',OP沒有說明它是合法的還是不是... –

    +0

    @BobVale這是真的。我提供了一種可以在這種情況下工作的替代模式。 –

    +0

    我defenitley更喜歡模式是相同的通過出入 – KBriz

    2

    這一個相當複雜的,但將匹配

    var regex = new Regex(@"^(?<number>\d{3}(?<separator>([\s-]|))\d{3}\k<separator>\d{4})?" + 
             "((?<=\d)\s|(?<=^)|(?=$))" + 
             "(?<extension>x\d{4})?(?<=.)$"); 
    
    • ^開始字符串的
    • (?<number>開始命名的基團數
    • \d{3}匹配3位數字
    • (?<separator>開始命名的基團分離器
    • ([\s-]|)匹配空間,-或空字符串
    • )靠近組分隔符
    • \d{3}匹配3位數字
    • \k<separator>匹配先前分離器
    • \d{4}匹配4位數字
    • )靠近組數
    • ?以前的匹配是可選
    • ((?<=d)\s|(<=^)|(?=$))前一個字符是數字和匹配的空間,或在開始或結束相匹配零長度如果字符串的
    • (?<extension>)開始命名組擴展
    • x\d{4}比賽x其次是4個位數。
    • )接近組擴展
    • ?機羣是可選
    • (?<=.)零,從而確保了字符串長度匹配不是空字符串
    • 退房www.regexlib.com的