应该固定啊,楼主的需求明确了是电话号码,那长度就是固定的11位
如果有国家代码,按照每一个国家一组来处理。用国家代码做key,存在一个map里面。分离国家码后,把后面的传入value做判断。就是做一个
map<int, PhoneNumValidate>
先弄key
1。先判断-,有两个或者以+开头肯定是带国家码的,转成int做key,截取后面的备用的
2。如果只有一个-,判断-前面的长度,小于5且没有*,前面就是国家码,转成int做key,截取后面的备用
然后弄号码验证,这个内部也用map保存电话号码,自己做个pair来保存区间上下界,用一个vector保存所有区间
1。有*就是通配,把后面补齐做range验证,例如135*,那你就做个range,只记录上下界13500000000,和13599999999.
2。有-就是区间,还是记录上下界,跟1一样
3。如果是电话号码,去map里面查重,有就通知退出,没有就循环所有区间,用上下界跟当前号码判断大小,在区间就通知退出。区间判断完了,说明不在,就加入map保存
4。如果是区间,先去查map单个号码,然后和其它保存的区间比较大小,都不冲突就加入区间vector
【 在 here080 的大作中提到: 】
: 电话号码长度不固定啊,你要不同意我就报警了。
:
--
FROM 152.78.1.*