2013-02-26 90 views
2

我有一个文本区域,用户可以在其中填写有关他自己的信息。审查员的联系信息,如电话号码或电子邮件地址

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

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

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 

请帮助。

+0

您可以先删除任何非数字字符r从字符串,然后验证... – 2013-02-26 09:06:30

+0

请解释:什么是“cencer”;) – djot 2013-02-26 09:07:57

+0

“cencer”是检测并删除。 – 2013-02-26 09:08:52

回答

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(或您的用户的任何其他经常使用的TLD)
  • 地带的所有非数字字符和检查结果数字
  • 搜索大型电子邮件公司的名称,如Google,GMX,Yahoo,Apple(ME,iCloud)等。

下面是关于如何找到电子邮件和电话号码的一些问题和答案唱PHP:

+1

谢谢@insertusernamehere,正确理解我的问题并给出有用的答案。 – 2013-02-26 10:50:20

0

您可以使用:

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

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

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"; 
} 
+0

亲爱的prasanth,正斜杠,反斜杠和空格不起作用。 – 2013-02-26 09:38:46

+0

@Danial:请现在检查答案,我编辑它。 – 2013-02-26 09:43:14

相关问题