FILTER VALIDATE与Preg_match。哪一个使用?

时间:2012-07-19 20:15:25

标签: php validation filter filtering w3c

要验证输入日期,包括表单URL或表单,您通常使用哪种技术?

我一直在关注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";
}

使用这些或其他方面是否有任何优势? 谢谢!

4 个答案:

答案 0 :(得分:4)

我的两分钱:取决于。

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

是否存在filter_*函数,验证完全我期望的那种输入?

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

正则表达式比filter_*函数更复杂,但filter_*和正则表达式的功能非常松散。最有可能的是,可以制作一个正则表达式来完成filter_*函数的工作,但它不能以相反的方式工作。因此,正则表达式为表提供了更多功能和灵活性,同时也更复杂。

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

答案 1 :(得分:3)

Php为php 5.2引入了各种类型的变量验证的filer_功能。使用filter_var ||是一种很好的做法filter_input满足您的需求。

除了它更安全之外,它还可以节省大量的开发时间,使你的头脑超过正则表达式。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

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