日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

使用正则表达式判断合法的电话号码

發(fā)布時(shí)間:2024/1/1 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用正则表达式判断合法的电话号码 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

最近碰到了這樣一個(gè)需求,提交標(biāo)單的時(shí)候判斷用戶(國(guó)內(nèi))是否在輸入框輸入了正常的手機(jī)或者電話座機(jī)號(hào)碼。

?

手機(jī)號(hào)碼格式比較固定,無(wú)非是13x xxxx xxxx或者15x xxxx xxxx再或者18x xxxx xxxx的格式。座機(jī)就比較麻煩,比如長(zhǎng)途區(qū)號(hào)變長(zhǎng)(3位或者4位)電話號(hào)碼變長(zhǎng)(7位或者8位)有些還需要輸入分機(jī)號(hào)。

?

通常可以看到解決這個(gè)復(fù)雜問(wèn)題的解決方案是手機(jī)號(hào)和座機(jī)號(hào)分開(kāi)。座機(jī)號(hào)拆分成三段,區(qū)號(hào),電話號(hào)碼+分機(jī)號(hào)。但是為了表單看起來(lái)清爽,設(shè)計(jì)的時(shí)候給了一個(gè)“萬(wàn)能”的輸入框,給用戶輸入電話號(hào)碼或者手機(jī)號(hào)碼。

?

在這樣的一個(gè)需求的大前提下,用復(fù)雜的正則表達(dá)式解決驗(yàn)證的問(wèn)題是一種快速的解決方案。

?

首先搞定最容易的手機(jī)號(hào)碼

因?yàn)槟壳伴_(kāi)放的號(hào)段是130-139, 150-159, 185-189, 180 (參見(jiàn)http://blog.chinaunix.net/u2/82549/showart_1894146.html), 我們可以給出這樣一個(gè)初步的正則表達(dá)式匹配串:(?<手機(jī)號(hào)>((13[0-9]{1})|(15[0-9]{1})|(18[0,5-9]{1}))+\d{8})。

?

接下來(lái)有人可能會(huì)在輸入手機(jī)號(hào)的時(shí)候?qū)懗?#43;8613xxxxxxxxx或者(+86)13xxxxxxxxx的形式,因此為了支持一下這一類比較少見(jiàn)的寫法,我們可以添加上國(guó)家代碼的前綴:(?<國(guó)家代碼>(\+86)|(\(\+86\)))?。

?

把前后串拼起來(lái)就是:^(?<國(guó)家代碼>(\+86)|(\(\+86\)))?(?<手機(jī)號(hào)>((13[0-9]{1})|(15[0-9]{1})|(18[0,5-9]{1}))+\d{8})$。

?

然后我們來(lái)搞定座機(jī)號(hào)碼

?

這個(gè)表達(dá)式寫起來(lái)相當(dāng)?shù)姆爆?#xff0c;我們一步一步地拼接吧。

?

同樣,國(guó)家代碼:(?<國(guó)家代碼>(\+86)|(\(\+86\)))?

?

三位區(qū)號(hào)的部分

010, 021-029,852(香港)

因?yàn)椴捎萌粎^(qū)號(hào)的地方都是8位電話號(hào)碼,因此可以寫成

(010|021|022|023|024|025|026|027|028|029|852)\d{8}

當(dāng)然不會(huì)這么簡(jiǎn)單,有些人習(xí)慣(010) xxxxxxxx的格式,我們也要支持一把,把以上表達(dá)式升級(jí)成

(?<三位區(qū)號(hào)>((010|021|022|023|024|025|026|027|028|029|852)|(\(010\)|\(021\)|\(022\)|\(023\)|\(024\)|\(025\)|\(026\)|\(027\)|\(028\)|\(029\)|\(852\)))\D?\d{8}

長(zhǎng)了許多

?

再看4位區(qū)號(hào)的城市

(?<四位區(qū)號(hào)>(0[3-9][1-9]{2})|(\(0[3-9][1-9]{2}\)))\D?\d{7,8})

這里簡(jiǎn)單判斷了不可能存在0111或者0222的區(qū)號(hào),以及電話號(hào)碼是7位或者8位。

?

最后是分機(jī)號(hào)

(?<分機(jī)號(hào)>\D?\d{1,4})?

?

以上拼裝起來(lái)就是:

^(?<國(guó)家代碼>(\+86)|(\(\+86\)))?\D?(?<電話號(hào)碼>(?<三位區(qū)號(hào)>((010|021|022|023|024|025|026|027|028|029|852)|(\(010\)|\(021\)|\(022\)|\(023\)|\(024\)|\(025\)|\(026\)|\(027\)|\(028\)|\(029\)|\(852\)))\D?\d{8}|(?<四位區(qū)號(hào)>(0[3-9][1-9]{2})|(\(0[3-9][1-9]{2}\)))\D?\d{7,8}))(?<分機(jī)號(hào)>\D?\d{1,4})?$

?

基本上沒(méi)法理解了……

?

順便給出CSharp代碼示例

private const string MobileMatchStr = @"^(?<國(guó)家代碼>(\+86)|(\(\+86\)))?(?<手機(jī)號(hào)>((13[0-9]{1})|(15[0-9]{1})|(18[0,5-9]{1}))+\d{8})$";private const string TelMatchStr = @"^(?<國(guó)家代碼>(\+86)|(\(\+86\)))?\D?(?<電話號(hào)碼>(?<三位區(qū)號(hào)>((010|021|022|023|024|025|026|027|028|029|852)|(\(010\)|\(021\)|\(022\)|\(023\)|\(024\)|\(025\)|\(026\)|\(027\)|\(028\)|\(029\)|\(852\)))\D?\d{8}|(?<四位區(qū)號(hào)>(0[3-9][1-9]{2})|(\(0[3-9][1-9]{2}\)))\D?\d{7,8}))(?<分機(jī)號(hào)>\D?\d{1,4})?$";private static readonly Regex MobileMatchRegex = new Regex(MobileMatchStr, RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace);private static readonly Regex TelMatchRegex = new Regex(TelMatchStr, RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace);private static bool IsMobile(string text){return MobileMatchRegex.IsMatch(text);}private static bool IsTel(string text){return TelMatchRegex.IsMatch(text);}

?

?

小結(jié):

這里僅僅對(duì)電話號(hào)碼作了一個(gè)基本的篩選,避免了諸如1234567890123的非法號(hào)碼,但是對(duì)于支持電話號(hào)碼格式的智能程度有限,比如不去區(qū)分四位電話號(hào)碼是否存在。

轉(zhuǎn)載于:https://www.cnblogs.com/powertoolsteam/archive/2010/10/09/1846808.html

總結(jié)

以上是生活随笔為你收集整理的使用正则表达式判断合法的电话号码的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。