【问题标题】:FILTER_VALIDATE vs Preg_match. Which one to use?FILTER_VALIDATE 与 Preg_match。使用哪一个?
【发布时间】:2012-07-19 02:17:12
【问题描述】:

要验证输入日期,无论是表单 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";
}

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

【问题讨论】:

  • 使用过滤器,它们相对较新(PHP 5.2.0),这就是为什么你没有看到太多
  • @Dragon - 2006-11-02 比较新?
  • 相对是的。宇宙的年龄在 12 到 140 亿年之间,所以 6 岁是新的

标签: php validation filter filtering w3c


【解决方案1】:

自 php 5.2 起,Php 为各种类型的变量验证引入了 filer_ 功能。最好使用filter_var || filter_input 满足您的需求。

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

【讨论】:

    【解决方案2】:

    我的两分钱:视情况而定。

    这取决于您是否应该在正则表达式上使用过滤器函数。其实标准很简单:

    是否存在一个filter_* 函数来验证完全我所期望的输入类型?

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-03-11
          • 2016-10-06
          • 1970-01-01
          • 2018-06-08
          • 2018-07-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多