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

时间:2012-11-01 23:09:40

标签: c# regex

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

笑话#12234

这是笑话的身体

发件人:约翰


有时人们使用他们的电话号码作为发件人姓名,这在公共场合是不允许的。我想确定发件人姓名中是否有电话号码可以审查它。我假设任何大于6位的数字作为电话号码。但问题是用户可能会将数字分开,如:

1234567890应成为1234XXX7890
123 456 7890应成为123 XXX 7890
123-456-7890
123456-7890


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

john23 peterson12345

任何人都可以提供更好的方式吗?

2 个答案:

答案 0 :(得分:0)

要保留所有格式,请替换

(\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?要抓住这些,请执行以下操作:

(?<!\d)((?:\d[-\s()]*){3})(?:\d[-\s()]*){3}((?:\d[-\s()]*){4})(?!\d)
然而,这可能会“过多”,例如1-2-3-4-5-6-7-8-9-0。您必须确定要攻击的余额。

答案 1 :(得分:0)

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