繁体   English   中英

正则表达式:标识不同格式的电话号码

[英]Regex: Identify phone numbers in different formats

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

笑话#12234

这是身体
开玩笑的

发件人:John

有时人们将其电话号码用作发件人姓名,这在公共场合是不允许的。 我想确定发件人姓名中是否有电话号码可以进行审查。 我假设电话号码大于6位数字。 但是问题是用户可能会像这样分隔数字:

1234567890应该变成1234XXX7890
123 456 7890应该变成123 XXX 7890
123-456-7890
123456-7890


等等。 与上述格式相似的任何形式都应进行审查。 我试着删除非数字字符,然后使用正则表达式,但问题是它也提取了:

约翰·约翰·彼得森12345

谁能提供更好的方法?

要保留所有格式,请替换

(\d{3}[-\s()]*)\d{3}([-\s()]*\d{4})

$1XXX$2

要进一步限制10位数字( 在紧随其前和之后禁止使用其他数字),请使用否定环顾断言:

(?<!\d)(\d{3}[-\s()]*)\d{3}([-\s()]*\d{4})(?!\d)
^^^^^^^                                   ^^^^^^

最后,如果输入错误导致用户在组之间插入空格或符号,例如(123)45 6-7890怎么(123)45 6-7890 要也捕获这些,请执行以下操作:

(?<!\d)((?:\d[-\s()]*){3})(?:\d[-\s()]*){3}((?:\d[-\s()]*){4})(?!\d)

但是,这可能会“太多”,例如1-2-3-4-5-6-7-8-9-0 您将必须确定要达到的平衡。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM