我正在嘗試綜合使用正則表達式來驗證電話號碼。 理想狀況下,它將處理國際格式,但必須處理美國格式,包括如下內容: 正則表達式
我會以目前的嘗試回答,但我但願有人能作得更好和/或更優雅。 服務器
這是在JavaScript中效果很好的一種。 它在字符串中,由於這就是Dojo小部件所指望的。 spa
它與帶有可選擴展名的10位北美NANP號匹配。 空格,破折號和句點是可接受的定界符。 code
"^(\\(?\\d\\d\\d\\)?)( |-|\\.)?\\d\\d\\d( |-|\\.)?\\d{4,4}(( |-|\\.)?[ext\\.]+ ?\\d+)?$"
我一直在同一個問題上掙扎,試圖使個人應用程序成爲將來的證實,可是這些傢伙讓我朝着正確的方向前進。 我實際上不是在檢查數字自己是否有用,我只是在嘗試確保輸入的一系列數字可能有擴展名,也可能沒有擴展名。 ip
最糟糕的狀況是,若是用戶不得不從XML文件中提取未格式化的號碼,那麼他們仍然只會在電話的數字鍵盤012345678x5
鍵入數字,沒有真正的理由保持美觀。 這種RegEx對我來講會是這樣的: 字符串
\d+ ?\w{0,9} ?\d+
01234467 extension 123456
01234567x123456
01234567890
對格式字符進行替換,而後檢查其他字符的電話有效性。 在PHP中, io
$replace = array( ' ', '-', '/', '(', ')', ',', '.' ); //etc; as needed preg_match( '/1?[0-9]{10}((ext|x)[0-9]{1,4})?/i', str_replace( $replace, '', $phone_num );
這樣破壞一個複雜的正則表達式可能一樣有效,但更爲簡單。 服務器端
若是您只是想驗證本身在該字段中沒有隨機垃圾(即來自垃圾郵件發送者),則此正則表達式應該作得很好: 擴展
^[0-9+\(\)#\.\s\/ext-]+$
請注意,對於多少個數字或這些數字中有效的數字沒有任何特殊的規則,它僅驗證僅數字,括號,破折號,加號,空格,磅,星號,句點,逗號或字母e
, x
, t
存在。 程序
它應該與國際號碼和本地化格式兼容。 您預見到某些區域是否須要使用方括號,大括號或尖括號? (當前不包括在內)。
若是您想維持每位數字的規則(例如美國區號和前綴(交換碼)必須在200-999範圍內),請祝您好運。 維持一個複雜的規則集,這在世界上任何國家未來均可能會過期,這聽起來並不有趣。
並且,儘管剝離全部/大多數非數字字符在服務器端可能效果很好(尤爲是若是您打算將這些值傳遞給撥號程序),但您可能不但願在驗證期間破壞用戶的輸入,尤爲是若是您但願它們在另外一個領域進行更正。
到目前爲止,這是我最好的嘗試。 它處理上面的格式,可是我肯定我缺乏其餘可能的格式。
^\d?(?:(?:[\+]?(?:[\d]{1,3}(?:[ ]+|[\-.])))?[(]?(?:[\d]{3})[\-/)]?(?:[ ]+)?)?(?:[a-zA-Z2-9][a-zA-Z0-9 \-.]{6,})(?:(?:[ ]+|[xX]|(i:ext[\.]?)){1,2}(?:[\d]{1,5}))?$