Phone number regular expression
- ChinaMain11Mobile3Y2018Mobile
"(^((13[0-9])|(14[5,7,9])|(15[0-3,5-9])"
"|166|(17[0,1,3,5-8])|(18[0-9])|(19[8-9])))-?\\d{4}-?\\d{4}$"
- ChinaMain11Mobile3Y2018Mobile86
"^((\\+86)|(86))?-?"
"((13[0-9])|(14[5,7,9])|(15[0-3,5-9])"
"|166|(17[0,1,3,5-8])|(18[0-9])|(19[8-9]))-?\\d{4}-?\\d{4}$"
- ChinaMainPhone
"(^0\\d{2,3})?-?\\d{7,8}$"
- LesserNums11Mobile
// "^\\d{11}$"
"^\\d{3}-?\\d{4}-?\\d{4}$"
- LesserPhone
"^\\d+$"
Part of phone number validator implementation in C++
Full code and test cases see
- https://yuiwong.org/gitlab/cpp/cppbase/blob/master/yuiwongcppbase/include/yuiwong/phonenumer.hpp
- https://yuiwong.org/gitlab/cpp/cppbase/blob/master/yuiwongcppbase/src/base/phonenumber.cpp
- …
struct PhoneNumber final {
/**
* Phone number specification
* MDN号码的结构如下: CC + MAC + H0 H1 H2 H3 + ABCD 其中:
* - 【CC】: 国家码,中国使用86。
* - 【MAC】: 移动接入码,本网采用网号方案,为133。
* - 【H0H1H2H3】: HLR识别码,由运营商统一分配。
* - 【ABCD】: 移动用户号,由各HLR自行分配。
*/
enum class Spec {
/**
* @sa https://baike.baidu.com/item/%E6%89%8B%E6%9C%BA%E5%8F%B7%E7%A0%81
* 电信 联通 移动 + 2018
* - 中国电信号段
* 133 149 153 173 177 180 181 189 199
* - 中国联通号段
* 130 131 132 145 155 156 166 171 175 176 185 186
* - 中国移动号段
* 134(0-8) 135 136 137 138 139 147 150 151 152 157 158 159 178
* 182 183 184 187 188 198
*
* - 其他号段
* 14 号段以前为上网卡专属号段 如中国联通的是 145 中国移动的是 147 等等
* 虚拟运营商
* - 电信
* 1700 1701 1702
* - 联通
* 1704 1707 1708 1709 171
* - 移动
* 1703 1705 1706
* - 卫星通信
* 1349
*
* Pattern:
* - nnnnnnnnnnn
* - nnn-nnnn-nnnn
* - nnn-nnnnnnnn
* - nnnnnnn-nnnn
*/
ChinaMain11Mobile3Y2018Mobile = 0,
/**
* Pattern:
* - nnnnnnnnnnn
* - nnn-nnnn-nnnn
* - nnn-nnnnnnnn
* - nnnnnnn-nnnn
* - 86nnnnnnnnnnn
* - 86-nnnnnnnnnnn
* - 86-nnn-nnnn-nnnn
* - 86-nnn-nnnnnnnn
* - 86-nnn-nnnn-nnnn
* - +86nnnnnnnnnnn
* - +86-nnnnnnnnnnn
* - +86-nnn-nnnn-nnnn
* - +86-nnn-nnnnnnnn
* - +86-nnn-nnnn-nnnn
*/
ChinaMain11Mobile3Y2018Mobile86 = 1,
/**
* 区号+号码,区号以 0 开头 3 位或 4 位
* 号码由 7 位或 8 位数字组成
* 区号与号码之间可以无连接符 也可以 - 连接
* Pattern:
* - 0nnnnnnnnn
* - 0nn-nnnnnnn
* - 0nnnnnnnnnn
* - 0nnn-nnnnnnn
*/
ChinaMainPhone = 10,
/**
* Pattern:
* - nnnnnnnnnnn
* - nnn-nnnn-nnnn
*/
LesserNums11Mobile = 98,
/**
* Pattern: n...
* @note remove all +/- first
*/
LesserPhone = 99,
};
...
};