使用filter_var()和FILTER_VALIDATE与preg_match()相比的优点

问题描述 投票:0回答: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";
}

使用其中一种或另一种有什么优势吗?

php validation filter filtering w3c
4个回答
4
投票

我的两分钱:这取决于。

是否应该使用过滤函数而不是正则表达式取决于具体情况。其实,标准很简单:

是否存在

filter_*
函数可以验证完全我所期望的输入类型?

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

正则表达式比

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

就我个人而言,在处理简单输入(整数、日期、时间)时,我使用

filter_*
函数,而更复杂的输入或非常具体或自定义的输入(自定义标识符应以字母开头和结尾,并且包含 3 位数字)之间)更适合正则表达式。


3
投票

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

除了更安全之外,它还可以为您节省大量开发时间,让您在正则表达式上绞尽脑汁。


1
投票

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


1
投票

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

如果您想做其他事情,只检查有效数字以及涉及字符串的更复杂一点,那么使用正则表达式可能是正确的方法。

© www.soinside.com 2019 - 2024. All rights reserved.