正则表达式判断合法的电话号码
来源:互联网 发布:淘宝联盟qq群推广 编辑:程序博客网 时间:2024/05/01 15:46
手机号码格式比较固定,无非是13x xxxx xxxx或者15x xxxx xxxx再或者18x xxxx xxxx的格式。座机就比较麻烦,比如长途区号变长(3位或者4位)电话号码变长(7位或者8位)有些还需要输入分机号。
通常可以看到解决这个复杂问题的解决方案是手机号和座机号分开。座机号拆分成三段,区号,电话号码+分机号。但是为了表单看起来清爽,设计的时候给了一个“万能”的输入框,给用户输入电话号码或者手机号码。
在这样的一个需求的大前提下,用复杂的正则表达式解决验证的问题是一种快速的解决方案。
首先搞定最容易的手机号码
因为目前开放的号段是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})。
接下来有人可能会在输入手机号的时候写成+8613xxxxxxxxx或者(+86)13xxxxxxxxx的形式,因此为了支持一下这一类比较少见的写法,我们可以添加上国家代码的前缀:(?<国家代码>(\+86)|(\(\+86\)))?。
把前后串拼起来就是:^(?<国家代码>(\+86)|(\(\+86\)))?(?<手机号>((13[0-9]{1})|(15[0-9]{1})|(18[0,5-9]{1}))+\d{8})$。
然后我们来搞定座机号码
这个表达式写起来相当的繁琐,我们一步一步地拼接吧。
同样,国家代码:(?<国家代码>(\+86)|(\(\+86\)))?
三位区号的部分
010, 021-029,852(香港)
因为采用三位区号的地方都是8位电话号码,因此可以写成
(010|021|022|023|024|025|026|027|028|029|852)\d{8}
当然不会这么简单,有些人习惯(010) xxxxxxxx的格式,我们也要支持一把,把以上表达式升级成
(?<三位区号>((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位区号的城市
(?<四位区号>(0[3-9][1-9]{2})|(\(0[3-9][1-9]{2}\)))\D?\d{7,8})
这里简单判断了不可能存在0111或者0222的区号,以及电话号码是7位或者8位。
最后是分机号
(?<分机号>\D?\d{1,4})?
以上拼装起来就是:
^(?<国家代码>(\+86)|(\(\+86\)))?\D?(?<电话号码>(?<三位区号>((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}|(?<四位区号>(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?(?<电话号码>(?<三位区号>((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}|(?<四位区号>(0[3-9][1-9]{2})|(\(0[3-9][1-9]{2}\)))\D?\d{7,8}))(?<分机号>\D?\d{1,4})?$"
;
- 使用正则表达式判断合法的电话号码
- 使用正则表达式判断合法的电话号码
- 使用正则表达式判断合法的电话号码
- 正则表达式判断合法的电话号码
- 判断用户输入的数字是一个合法的电话号码的正则表达式
- 正则表达式判断电话号码
- 常常用到判断电话号码的正则表达式
- 正则表达式判断合法IP
- java正则表达式判断电话号码
- 表达式的合法判断
- 判断是否为合法的电话号码
- 判断输入是否为合法的电话号码
- 判断输入是否为合法的电话号码
- 判断输入是否为合法的电话号码
- 电话号码的正则表达式
- IOS判断邮箱和电话号码的正则表达式
- iOS成长之路-判断是不是电话号码的正则表达式
- iOS的电话号码344格式以及判断电话号码的正则表达式
- 之生产者与消费者问题,Lock和Condition,线程面试题
- 构造函数中初始化成员
- 无线模块WizFi630问题集锦
- 关联其它程序打开txt类型文件
- C语言获取本机名称
- 正则表达式判断合法的电话号码
- hdu 4217 (线段树)
- C语言获取当前登录用户名
- 设计模式原来如此-单例模式(Singleton Pattern)
- Shell脚本编程的常识
- Tor源码文件分析 -- Cpuworker
- 访问simulator app的文件目录
- C++获取进程启动参数
- MFC计算两个日期的时差