[求]手机号码和固话号码正则表达式

要求是,输入正确手机或固话都能通过验证支持长途,手机号码前可加0。固话可带区号现在是这样写的手机部分:^0?1[358]\d{9}$固话部分:^(0(10|2[1-3]|... 要求是,输入正确手机或固话都能通过验证
支持长途,手机号码前可加0。固话可带区号

现在是这样写的
手机部分:^0?1[358]\d{9}$
固话部分:^(0(10|2[1-3]|[3-9]\d{2}))?[1-9]\d{6,7}$
然后用或符号“|”连接起来
^(0?1[358]\d{9})|((0(10|2[1-3]|[3-9]\d{2}))?[1-9]\d{6,7})$

用错误的号码测试 123456789012
单独用手机部分测试,得到号码非法
单独用固话部分测试,得到号码非法
但是用连接起来的表达式测试,居然能通过

为什么 ???

解释此现象给100分

再求一能解决此问题的正则,再追加100分
展开
 我来答
8383463
推荐于2017-09-14 · TA获得超过328个赞
知道小有建树答主
回答量:119
采纳率:0%
帮助的人:145万
展开全部
明白楼主的意思了,单独使用手机部分和固话部分的正则,得到号码非法,也就是说正则判断正确!

使用连接起来的表达式,号码通过。原因:"|"连接符;由于此连接符优先级最低,所以它将连接后的表达式分为两个部分

^(0?1[358]\d{9}) 和 ((0(10|2[1-3]|[3-9]\d{2}))?[1-9]\d{6,7})$

导致了连接后的表达表达意思错误,解决方法有两种:

^(0?1[358]\d{9})$|^((0(10|2[1-3]|[3-9]\d{2}))?[1-9]\d{6,7})$
或者
^((0?1[358]\d{9})|((0(10|2[1-3]|[3-9]\d{2}))?[1-9]\d{6,7}))$

也就是在^和$中间加一对括号。

================

还有不明白的,可以发Hi消息。
百度网友365925a
2009-05-08 · TA获得超过376个赞
知道小有建树答主
回答量:638
采纳率:0%
帮助的人:477万
展开全部
^(0?1[358]\d{9})|^((0(10|2[1-3]|[3-9]\d{2}))?[1-9]\d{6,7})$
他是迭代匹配的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
aaron7524
2009-05-14 · 超过21用户采纳过TA的回答
知道答主
回答量:49
采纳率:0%
帮助的人:50.6万
展开全部
8383463回答的有道理,学习了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
akin08
2009-05-07 · TA获得超过134个赞
知道答主
回答量:29
采纳率:0%
帮助的人:27.9万
展开全部
这是什么来的,看不懂,帮你顶上去....
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式