我有一个文本区域,用户可以在其中填写有关自己的信息。
我需要检测用户是否填写了电话号码。或该文本区域中的电子邮件地址。
我知道固定模式可以与正则表达式匹配,但如何处理各种格式,例如:
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
请帮忙。
我有一个文本区域,用户可以在其中填写有关自己的信息。
我需要检测用户是否填写了电话号码。或该文本区域中的电子邮件地址。
我知道固定模式可以与正则表达式匹配,但如何处理各种格式,例如:
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
请帮忙。
我认为您无法在一个字符串中找到所有电话号码和电子邮件地址。它会变得非常复杂。如果您不让人们保存他们的个人资料,因为您怀疑他们有无效信息,他们可能会尝试很长时间,直到他们找到一个模式,您的正则表达式将无法处理。有人可能会得到:
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)以下是有关如何使用 PHP 查找电子邮件和电话号码的更多问题和解答:
您可以使用:
\d([,-. ] *\d){5}
它允许, . -
和空格字符。如果要包含更多分隔符,只需将它们添加到[...]
尝试这个:
$number = '12.3555';
if(preg_match('/[\/0-9,-\.\s\\\]{6,}/',$number) && count(array_filter(str_split($number),'is_numeric')) >= 6){
echo "phone number exists";
}