审查员联系信息,如电话号码或电子邮件地址

时间:2013-02-26 09:04:10

标签: php regex cakephp-1.3

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

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

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

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

请帮忙。

3 个答案:

答案 0 :(得分:1)

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

My name is Peter at googleD0Tcom'on.

另一方面,你会让人生气,因为你错误地发现了不是欺诈的东西。假设您使用评论中建议的Jan Hančič来删除所有非数字字符(这不是一个糟糕的方法):

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

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

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

我会检查字符串:

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

以下是有关如何在PHP中查找电子邮件和电话号码的更多问题和答案:

答案 1 :(得分:0)

您可以使用:

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

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

答案 2 :(得分:0)

试试这个:

$number    = '12.3555';

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