PHP - 如何询问字段是否包含数字或+或空格或空的?

问题描述:

我的网站表单正在受到垃圾邮件的攻击。我注意到在“手机”字段垃圾邮件机器人总是插入文本,而不是一个数字,所以我想添加一个if语句给php邮件程序阻止电子邮件,如果电话字段不包含任何以下内容:PHP - 如何询问字段是否包含数字或+或空格或空的?

1)我希望用户能够将字段留空,因此必须接受空字段。

2)必须包含“数字”或“加号”或“空格”

如何将我写这篇文章的PHP?

任何帮助表示赞赏

编辑:只是笑,虽然它会更容易只检查该字段包含字母字符。我将如何做到这一点?

EDIT2:Sorted。我用“if(ctype_alpha($ phone)!== false)”

+3

你可以用几千种不同的方式写这样的东西。你试过什么了? – 2014-10-20 07:35:49

+0

为什么不是验证码或“什么颜色是草?”之类的事情? – jimmy 2014-10-20 07:36:55

+0

可能重复[如何检查一个字符串是否包含特定单词?](http://*.com/questions/4366730/how-to-check-if-a-string-contains-specific-words) – 2014-10-20 07:41:37

正则表达式可能是最好的方法,尽管不一定最容易理解。但是如果你不熟悉正则表达式,那么学习肯定是一件好事。我最喜欢的介绍是这个网站: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 
+0

当然“if(ctype_alpha($ phone)!== false)”例子更简单吗?记住这一点是要阻止我收到的垃圾邮件形式提交 – Chris 2014-10-20 08:08:58

+0

是的,作为一个快速检查,以防止你的垃圾邮件问题它应该没问题。正如Sverri M. Olsen在原评论中所说的那样,有很多方法可以解决这个问题。 – phansen 2014-10-20 08:14:21

,首先必须使用例如一些spamblock:令牌,蜜罐,验证码等

在我国,移动或本地电话号码,只包含无国家代码是XX + 9digits。所以我在db中创建INT(10)字段。提交表单后,删除没有数字的一切。

例如:

$phoneNumber = (int) substr(preg_replace('#[^\d]+#', '', $_POST['phone_numer']), 0, 9); 

在许多项目工程百达。

+0

9位数字与“INT(9)”数据库字段之间没有关系。前者与9位数字串的长度有关,后者与存储整数时使用多少字节(因此数字有多大)有关。另外,你的正则表达式不会做提问者想要的东西。在回答之前,请正确阅读问题。 – 2014-10-20 10:23:11

+0

是的,我知道,括号中的9是错字。我想到了9位数字的电话号码并在现场写下来。 – 2014-10-20 10:27:24