2012-07-19 64 views
4

要验证输入日期,无论是表单URL还是表单,您通常使用哪种技术?FILTER_VALIDATE vs Preg_match。哪一个使用?

我一直在寻找PHP Filters,但我很少看到他们的任何代码。

我已经看到平时使用preg_mach,例如:

$numbers = "/^[0-9]+$/D"; 

if (preg_match($numbers, $var)){ 
    echo "is number"; 
} 

相反的:

if(!filter_var($var, FILTER_VALIDATE_INT)) 
    echo "is number"; 
} 

是否有使用一种或另一种任何优势? 谢谢!

+1

使用过滤器,它们相对较新(PHP 5.2.0)这就是为什么你没有看到它们太多 – 2012-07-19 20:18:20

+0

@Dragon - '2006-11-02'是相对较新的? – nickb 2012-07-19 20:20:45

+2

**相对**是的。宇宙年龄在120到140亿年之间,所以6岁是新的 – 2012-07-19 20:22:32

回答

3

从php 5.2开始,PHP引入了一系列变量验证的filer_功能。使用filter_var ||是很好的做法filter_input满足您的需求。

除了它更安全的事实,它还可以为你节省大量的开发时间,让你的头在正则表达式上开裂。

1

你一定要使用过滤器。它专门用于验证。正则表达式总是自定义的,如果你自己写,你可以忘记很多需要检查的东西。

1

两者都做同样的事情,但过滤器似乎是更简单和更好的选择使用,你也可以使用值范围,如果你想。

如果你想做其他的事情,只是检查一个有效的数字和一些更复杂的涉及字符串也然后使用正则表达式可能是要走的路。

4

我的两分钱:这取决于。

这取决于你是否应该对正则表达式使用过滤器函数的情况。其实,标准很简单:

是否有filter_*函数存在,验证究竟是我期待的输入类型?

  • 如果是这样,请使用filter_*函数。
  • 否则,使用正则表达式。

Regexs比filter_*功能更复杂,但filter_*和regexs功能都非常松散相关的。最有可能的是,一个正则表达式可以被用来完成filter_*函数的工作,但它不会以其他方式工作。所以,正则表达式为表格带来了更多的功能和灵活性,同时也更加复杂。我个人在处理简单输入(整数,日期,时间)时使用了一个filter_*函数,而更复杂的输入或非常特定的或自定义的输入(自定义标识符应以字母开头和结尾,并且有3位数字在之间)更适合于正则表达式。