4

要验证输入日期,无论是表单 URL 还是来自表单,您通常使用哪种技术?

我一直在研究PHP 过滤器,但我很少在任何代码上看到它们。

我经常看到preg_mach的使用,例如:

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

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

代替:

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

使用一个或另一个有什么好处吗?谢谢!

4

4 回答 4

4

我的两分钱:这取决于。

这取决于您是否应该在正则表达式上使用过滤器函数的情况。实际上,标准非常简单:

是否filter_*存在可以验证我期望的输入类型的函数?

  • 如果是这样,请使用该filter_*功能。
  • 否则,请使用正则表达式。

正则表达式比filter_*函数更复杂,但filter_*和正则表达式的功能却非常松散相关。最有可能的是,可以制作正则表达式来完成filter_*函数的工作,但反过来就不行了。因此,正则表达式为表格带来了更多的功能和灵活性,同时也更加复杂。

就个人而言,在处理简单的输入(整数、日期、时间)时,我使用filter_*函数,而更复杂的输入或非常具体或自定义的输入(应该以字母开头和结尾并且中间有 3 位数字的自定义标识符)更多适合正则表达式。

于 2012-07-19T20:36:19.487 回答
3

自 php 5.2 以来,php 引入了 filer_ 功能,用于各种类型的变量验证。使用filter_var ||是个好习惯 filter_input满足您的需求。

除了它更安全的事实之外,它还可以为您节省大量开发时间,使您对正则表达式感到头疼。

于 2012-07-19T20:28:35.923 回答
1

你绝对应该使用过滤器。它专门用于验证。正则表达式始终是自定义的,如果您自己编写,您可能会忘记许多需要检查的内容。

于 2012-07-19T20:21:12.650 回答
1

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

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

于 2012-07-19T20:32:24.170 回答