English 中文(简体)
过滤器_var 和 preg_match
原标题:filter_var versus preg_match
  • 时间:2009-10-09 14:40:31
  •  标签:

上午

I m 改装一个Im的工地,使其符合最新版本的公共卫生和社会福利部,因此Im正在用其不折不扣的等同方式处理和更换所有电子管理病例。 然而,有人告诉我,用PHP称作过滤器的手提式建筑功能。

我的是什么问题,是否有必要采用过滤器——从预想到吗? 如同在业绩上一样,在选择相互之间,如果是这样,则会有什么好处?

最佳回答

filter_var — Filters a variable with a specified filter
preg_match — Perform a regular expression match

我猜测使用过滤器可使用过滤器过滤器,以过滤变量,但作为预选的替代品,我不认为是一种良好的想法,可以从电子控制系统升级为过滤器_var don t use regex,而且你必须为此重写许多功能/地质。

问题回答

http://php.net/manual/en/book.filter.php。

<>秒钟>环境是关键。 一般来说,过滤功能旨在使用外部投入<>/em>(系列或阵列)或<>内部投入<>。 外部投入来自诸如吉大港山区申请/PHP发动机或表格提交等来源。

<代码>filter_input的装饰功能允许你bypass<>em>_SERVER,$_COOKIE,$_POST, and$_GET supraglobals all. 虽然你通常具体说明“什么地方”你想要从过滤功能中获取数据,但并未明确利用<>/em>_POST,_GET,_COOKIE, 和_SERVER。 你对变数/记录要素所作的改动,将不显示<>m>美元,即_GET,_POST,或_SERVER,因此,采用过滤方式是一种范式转变,可能大大改变申请的流程。 换言之,你必须跟踪外部投入。 我这样做是为了对外部投入进行初步筛选(筛选、替换、改变等)。 我不再使用_POST、_GET或_SERVER。 虽然我仍在使用美元。

由<代码>filter_var预先确定的职能是过滤你方案内已经存在的普通阵列。 我在使用<代码>过滤器_input后使用。 这两种情况都可以使用许多过滤器,但你的问题涉及 Performance

如果你选择使用<代码>FILTER_VALIDATE_REGEXP过滤器,则我无法想象这一间接方法比直接使用<代码>preg_match(。 就其他过滤器而言,如果这些过滤器完全没有从定期的信号中删除多少方法/功能,那么I不能看到在上的效率提高。

我认为过滤功能是旨在帮助改进许多应用中筛选任务的一致性的。 它们可能无意成为更高的、高效率的,但它们无疑比常规表述(尽管我非常喜欢定期表达)更能成为accessible。 我更愿意直接了解正在发生的情况,但有些人却不关心或可能不太关心。 然而,过滤功能打开了向那些不了解定期表述和其他基本网络应用安全程序的人过滤铺的大门。

一个人肯定会不使用过滤功能而生活。

更有甚者,我利用过滤功能与我自己的疗养者和鉴定人课。 因此,我不要求PHP为我思考,我只是利用PHP来扩大我已经知道如何做的事情(如果他们的职能被我误解的话)。 深入防卫。

简而言之,你的最好标本只是使用preg_match(),除非您打算将输入<>em> Changing the flow (filter_input function) 输入您的申请。 即便如此,业绩也有所提高,但你可以绕过“SERVER”、“POST”和“GET”美元。 此外,你还可以利用更简单、更有条理、连贯一致的过滤功能,并能够使用反馈功能(FILTER_CALLBACK),在家中、方法/功能(我也这样做)。 另外,你仍然可以使用<代码>FILTER_VALIDATE_REGEX过滤器的自己的定期表述,但我再次认为没有理由相信,如果你这样做,你的申请将有所改善。 可否维持? Maybe。 这取决于起草该法典的人。

转而使用<条码>过滤器_var(<>>>>>/代码”实际上是一个伟大的想法。 您无法使用你现有的定期表达方式,然而,我们人类团结会能够完全消除这些表达。 通常,我们用在我们的 app中使用的ex子只用于简单的validations和过滤,这正是功能的用意。

例如,在你的法典中,你可能已经:

if (eregi( [A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,4} , $_POST[ email ])) {
    echo "valid";
}

可改为“前言”版本(不依赖习惯定期表述):

if (filter_var($_POST[ email ], FILTER_VALIDATE_EMAIL)) {
    echo "valid";
}

rel=“nofollow”>sanitize out natures which aren t need by the particular data You reReview, and will re the Cleaned string (inffer of a boolean):

$clean = filter_var($_POST[ email ], FILTER_SANITIZE_EMAIL);

以<代码>filter_var()取代<代码>ereg_replace(<>/code>类型功能。

然而,对于最简单的升级,你只能“预先确定”功能的ereg*()家庭,使其符合个人教育要求(因此不再在PHP5.3+中解释)。





相关问题