【问题标题】:Censor contact info like phone number or email address审查联系信息,例如电话号码或电子邮件地址
【发布时间】:2013-02-11 15:53:55
【问题描述】:

我有一个文本区域,用户可以在其中填写有关自己的信息。

我需要检测用户是否填写了电话号码。或该文本区域中的电子邮件地址。

我知道固定模式可以与正则表达式匹配,但如何处理各种格式,例如:

9 7 8 5 8 7 

9, 7, 8, 5, 8, 7 

9.7.8.5.8.7 

Or any 6 or more consecutive number sepereated with \, -, etc

请帮忙。

【问题讨论】:

  • 您可以先从字符串中删除任何非数字字符,然后验证...
  • 请解释一下:什么是“cencer”;)
  • "cencer" 被检测并移除。
  • @Daniel:这个词是否存在于任何语言中?
  • @djot:对不起,我已经编辑了拼写。

标签: php regex cakephp-1.3


【解决方案1】:

我认为您无法在一个字符串中找到所有电话号码和电子邮件地址。它会变得非常复杂。如果您不让人们保存他们的个人资料,因为您怀疑他们有无效信息,他们可能会尝试很长时间,直到他们找到一个模式,您的正则表达式将无法处理。有人可能会得到:

My name is Peter at googleD0Tcom'on.

另一方面,你会因为你错误地检测到不属于欺诈的事情而激怒人们。假设您使用 cmets 中建议的 Jan Hančič 来去除所有非数字字符(这不是一个坏方法):

I'm 21 years old. In 2012 I already had like 45k reputation on Stackoverflow.

这将导致 21201245 并且可能是电话号码的一部分。

我建议过滤看起来可疑的新的和更新的配置文件并手动验证它们。如果由于包含伪装的电子邮件或电话号码而不是有效条目,请阻止它并向用户发送电子邮件,其中包含更新其个人资料的消息。

我会检查这样的字符串:

  • 是否包含:@at[at]dot.com(或您的用户经常使用的任何其他 TLD)
  • 去除所有非数字字符并检查结果数字
  • 搜索大型电子邮件公司的名称,例如 Google、GMX、Yahoo、Apple(ME、iCloud)等。

这里有更多关于如何使用 PHP 查找电子邮件和电话号码的问题和答案:

【讨论】:

  • 感谢@insertusernamehere,正确理解我的问题并给出有用的答案。
【解决方案2】:

你可以使用:

\d([,-. ] *\d){5}

它允许, . - 和空格字符。如果您想包含更多分隔符,只需将它们添加到[...]

【讨论】:

    【解决方案3】:

    试试这个:

    $number    = '12.3555';
    
    if(preg_match('/[\/0-9,-\.\s\\\]{6,}/',$number) && count(array_filter(str_split($number),'is_numeric')) >= 6){
      echo "phone number exists";
    }
    

    【讨论】:

    • 亲爱的 prasanth,前斜线、反斜线和空格不起作用。
    猜你喜欢
    • 1970-01-01
    • 2014-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多