我的网站表单受到了垃圾邮件的攻击。我注意到了电话"字段垃圾邮件机器人总是插入文本而不是一个数字,所以如果电话字段不包含以下任何内容,我想在php邮件中添加if语句来阻止电子邮件:
1)我希望用户能够将该字段留空,因此必须接受空字段。
2)必须包含"数字"或"加号"或"空格"
我如何用PHP写这个?
感谢任何帮助
编辑:虽然大声笑,但检查字段是否包含字母字符会更容易。我该怎么做?
EDIT2:排序。我用了#34; if(ctype_alpha($ phone)!== false)"
答案 0 :(得分:0)
正则表达式可能是最好的方法,但最初并不一定是最容易理解的。但是如果你不熟悉正则表达式肯定是一件好事。我最喜欢的介绍是这个网站:http://www.zytrax.com/tech/web/regex.htm这是一个很好的网站,用于交互式构建正则表达式并实时查看它是如何工作的:http://www.regexr.com/我确定有很多其他类似的网站但是那些是我经常回去的两个。
如果您搜索正则表达式解决方案,您会发现无数的可能性和变化。我个人的建议是保持简单。我首先考虑如何存储电话号码数据。我通常只保留数字,所以我会先删除那些"允许"字符,然后检查剩下的是否只是数字。
$phone = str_replace(Array('+', ' ', '(', ')'), '', $phone);
这将用空字符串替换所有的加号,空格和括号(即删除它们)。然后你可以检查字符串是否是数字,如果是存储它,否则打印/返回错误。
if (!is_numeric($phone))
// stop processing and output an error
答案 1 :(得分:-1)
首先你必须使用一些spamblock,例如:token,honey pot,captcha等。
在我的国家/地区,移动电话或本地电话号码仅包含9个数字,但不包含+ XX的国家/地区代码。所以我在db中创建了INT(10)字段。提交表单后删除所有没有数字的内容
例如:
$phoneNumber = (int) substr( preg_replace( '#[^\d]+#', '', $_POST['phone_numer'] ), 0, 9 );
在许多项目中总是有效。