a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > JSP > 正文

判斷合法的電話號碼的正則表達(dá)式

2024-09-05 00:23:42
字體:
供稿:網(wǎng)友

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

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

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

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

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

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

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

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

然后我們來搞定座機(jī)號碼

這個(gè)表達(dá)式寫起來相當(dāng)?shù)姆爆崳覀円徊揭徊降仄唇影伞?

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

三位區(qū)號的部分

010, 021-029,852(香港)

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

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

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

(?<三位區(qū)號>((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}

長了許多

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

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

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

最后是分機(jī)號

(?<分機(jī)號>/D?/d{1,4})?

以上拼裝起來就是:

^(?<國家代碼>(/+86)|(/(/+86/)))?/D?(?<電話號碼>(?<三位區(qū)號>((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ū)號>(0[3-9][1-9]{2})|(/(0[3-9][1-9]{2}/)))/D?/d{7,8}))(?<分機(jī)號>/D?/d{1,4})?$

基本上沒法理解了……

順便給出CSharp代碼示例

private const string MobileMatchStr = @"^(?<國家代碼>(/+86)|(/(/+86/)))?(?<手機(jī)號>((13[0-9]{1})|(15[0-9]{1})|(18[0,5-9]{1}))+/d{8})$";
private const string TelMatchStr = @"^(?<國家代碼>(/+86)|(/(/+86/)))?/D?(?<電話號碼>(?<三位區(qū)號>((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ū)號>(0[3-9][1-9]{2})|(/(0[3-9][1-9]{2}/)))/D?/d{7,8}))(?<分機(jī)號>/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é):

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 国产精品久久久久影院色老大 | 国产综合精品一区二区三区 | 免费一区 | 欧美高清一区 | 欧美一区二区免费 | 一二三区不卡视频 | av在线一区二区 | 久久久久久久伦理 | 国产精品成人久久久久 | 18韩国主播福利视频在线观看 | 色婷婷一区二区三区四区 | 中文字幕第九页 | av看片网 | 一二三区不卡视频 | 人人精品| 91精品国产92| 欧美日韩国产一区二区三区不卡 | 精品国产91久久久久久久 | 国产精品国产精品国产专区不片 | 一区视频在线 | 一区二区三区四区在线 | 精品国产乱码久久久久久闺蜜 | 在线观看一区二区视频 | 九九色综合 | 91污在线| 国产亚洲一区二区在线 | 一区二区三区在线播放 | 精品久久久久久久久久久久包黑料 | 久久久久久成人 | 91欧美在线 | 九九九色| 国产精品亚洲一区二区三区 | 亚洲欧美日韩另类精品一区二区三区 | 亚洲天堂影院 | 欧美成人一区二免费视频软件 | 久久国产成人午夜av影院宅 | 日韩中文字幕 | 国产a久久精品一区二区三区 | 精品亚洲一区二区三区在线观看 | 日韩久久久精品 | 欧美人人|