麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JSP > 正文

判斷合法的電話號碼的正則表達式

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

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

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

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

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

首先搞定最容易的手機號碼

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

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

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

然后我們來搞定座機號碼

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

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

三位區(qū)號的部分

010, 021-029,852(香港)

因為采用三位區(qū)號的地方都是8位電話號碼,因此可以寫成

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

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

(?<三位區(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位。

最后是分機號

(?<分機號>/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}))(?<分機號>/D?/d{1,4})?$

基本上沒法理解了……

順便給出CSharp代碼示例

private const string MobileMatchStr = @"^(?<國家代碼>(/+86)|(/(/+86/)))?(?<手機號>((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}))(?<分機號>/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é):

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 欧美精品国产综合久久 | 亚洲精品一区二区三区在线看 | 亚洲伊人色欲综合网 | 主播粉嫩国产在线精品 | 欧美成人精品一级 | 国产羞羞视频免费在线观看 | 欧美成人做爰高潮片免费视频 | 制服丝袜日日夜夜 | 欧美久久久久久久久 | 天堂成人一区二区三区 | 久久久久久久久久久久网站 | 欧美成人国产va精品日本一级 | 国产亲子伦在线观看 | 黄色片网站免费在线观看 | 午夜人体| 精品国产欧美一区二区 | 高颜值美女啪啪 | 男人的天堂色偷偷 | 国内精品视频饥渴少妇在线播放 | 在线天堂资源 | 亚洲第一精品在线 | 久久久久久久久日本理论电影 | 亚洲一级成人 | 国产美女视频一区二区三区 | 国产精品美女久久久久久不卡 | 午夜精品网| 久久老司机精品视频 | 日韩精品中文字幕一区二区 | 国产精品久久久久久238 | 97青青 | 国产精品久久久久久影院8一贰佰 | 日韩字幕在线观看 | 国产合集91合集久久日 | 亚洲码无人客一区二区三区 | 成年人毛片视频 | 欧美性激情视频 | 亚洲人成中文字幕在线观看 | 麻豆视频免费网站 | 伊久在线| 国产成人精品一区二区仙踪林 | 午夜丰满少妇高清毛片1000部 |