0

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

笑话#12234

这是
笑话

发件人的正文:约翰


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

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


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

john23 peterson12345

谁能提供更好的方法?

4

2 回答 2

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. 你必须确定你想要达到什么样的平衡。

于 2012-11-01T23:29:42.643 回答
0

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

于 2018-08-29T19:47:43.443 回答