【问题标题】:Regex expression to match multiple phone number combinations正则表达式匹配多个电话号码组合
【发布时间】:2018-11-07 22:51:11
【问题描述】:

我是 Stackoverflow 和正则表达式的新手,请多多包涵。我有个人在我们的论坛上发布虚假电话号码。该论坛有一个使用正则表达式的内容过滤器,一位同事在休陪产假之前更新了过滤器。现在我需要更新表达式以考虑新模式。如果匹配,则将电话号码替换为 [已编辑]。是否可以编写一个与以下数字匹配但不包括我们的支持线的表达式? (支持行号可以坚持单一格式)

  1. 1(864) 雅痞 361-8969
  2. 1(868) 雅痞 751 1556
  3. 1(878) 761-1655
  4. 1(864) 391-8999
  5. 1(865) 446 4830

支持热线 1-866-9789

所以我真的有两个问题,1) 我可以使用否定前瞻来匹配除我们的支持热线之外的所有电话号码和格式吗? 2) 我可以在号码之间输入文字时匹配电话号码吗?

棘手的部分是我不能禁止所有数字或组合,因为该论坛用于讨论财务。因此,数字会定期在帖子中使用。

提前致谢!

【问题讨论】:

  • 您对电话号码中间的文字有什么规定?如果我们对正则表达式过于松散,您最终可能会意外地审查大段文本。另外,换行符呢?
  • 你只匹配这 5 个数字吗?
  • 任何形式的黑名单都会被绕过。将电话号码伪装成其他数据很容易,例如call this: 1234567.
  • 目前我们没有任何规则来识别电话号码中间的文本。我不知道从哪里开始@john

标签: regex filter spam-prevention


【解决方案1】:

我反对电话号码的严格格式(参见例如this),所以请不要使用它来验证电话号码。

我还确定,将某些电话号码格式列入黑名单是一场无休止的军备竞赛,不可能获胜(除了禁止所有号码,即使这样也有办法规避它)。

话虽如此,请按照以下方式尝试正则表达式:

\b((\d[-\s]*)?\(?\d{2,3}\)?[-\s]*(\S+[-\s]*)?)?\d{3}[-\s]+\d{4}\b

要将您的支持热线列入白名单,只需检查匹配的字符串是否不是"1-855-700-6000"

【讨论】:

  • 我也反对对电子邮件/网站地址进行正式验证。不仅因为会有“假阴性”,还因为它永远不是验证。它只确保“看起来有效”的格式。但www.aaaaaaaaaaa.com 看起来也有效...
  • 谢谢卡梅伦!我会试试这个。它不会用于验证电话号码,而是用于查找号码并将其替换为另一个值。我知道这将是一场永无止境的战斗,但我必须尽量让他们慢下来。感谢您的帮助!
猜你喜欢
  • 2010-12-16
  • 2020-01-18
  • 2022-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多