首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Regex:识别不同格式的电话号码

问Regex:识别不同格式的电话号码
EN

Stack Overflow用户
提问于 2012-11-01 23:09:40
回答 2查看 297关注 0票数 0

我有一个网站,人们在那里写笑话。用户可以发送他们喜欢的笑话给他们(或他们的朋友)电话作为短信。这个笑话的发送者(他把这个笑话添加到了网站上)显示在下面:

笑话#12234

,这是的身体

of the玩笑

发件人: John

有些时候,人们用他们的电话号码作为发送者的名字,这在公共场合是不允许的。我想确定发件人的名字中是否有电话号码,以便能够对其进行审查。我假定任何大于6位数的号码都是电话号码。但问题是,用户可能会将数字分开,例如:

1234567890应改为1234XXX 7890

123 456 7890应改为123 XXX 7890

123-456-7890

123456-7890

诸若此类。任何类似于上述格式的表单都应该被审查。我尝试删除非数字字符,然后使用正则表达式,但问题是,它还会获取:

john23 peterson12345

有人能提供更好的方法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-01 23:29:42

若要保留所有格式,请替换

代码语言:javascript
复制
(\d{3}[-\s()]*)\d{3}([-\s()]*\d{4})

使用

代码语言:javascript
复制
$1XXX$2

若要进一步限制10位数字(即不允许在紧接其后和之前增加数字),请使用负查找断言:

代码语言:javascript
复制
(?<!\d)(\d{3}[-\s()]*)\d{3}([-\s()]*\d{4})(?!\d)
^^^^^^^                                   ^^^^^^

最后,如果键入会导致用户在组之间插入空间或符号,例如(123)45 6-7890?要捕获这些信息,请执行以下操作:

代码语言:javascript
复制
(?<!\d)((?:\d[-\s()]*){3})(?:\d[-\s()]*){3}((?:\d[-\s()]*){4})(?!\d)

然而,这可能会导致“太多”,例如1-2-3-4-5-6-7-8-9-0。你必须决定你想要达到什么样的平衡。

票数 0
EN

Stack Overflow用户

发布于 2018-08-29 19:47:43

因为这个世界上有很多电话号码格式,所以你可以用这个正则表达式来识别任何电话号码。^[0-9-+s()]*$

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13186906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档