FILTER_VALIDATE_REGEXP empty


FILTER_VALIDATE_REGEXP empty

我正在尝试用php验证一个字段。我用POST传递这个值,它必须只包含数字和pipi("|")。

我使用filter_input来检查该值是否有效:

filter_input(INPUT_POST,"q",FILTER_VALIDATE_REGEXP,array("options"=>array("regexp"=>"/^'s{0,}[0-9|]{0,}'s{0,}$/"));

此正则表达式验证数字、"|"以及前后的可选空格。这应该同时验证空字段,但事实并非如此。如果字段为空,filter_input将返回FALSE。

如何验证空字段?我要接受也空为有效。

当字段日期被编译时,所有工作。如果日期为空,则不验证日期。

您的正则表达式匹配一个空字符串,因为它是

什么都不输入,你就会得到

string '' (length=0)

然而,当输入丢失时,情况就不同了。

这是有文件记录的

如果未设置variable_name变量,则为NULL。

http://php.net/manual/en/function.filter-input.php

强制转换为字符串将像null强制转换为空字符串一样"工作"

所以

(string) filter_input(INPUT_POST,"q",FILTER_VALIDATE_REGEXP,array("options"=>array("regexp"=>"/^'s{0,}[0-9|]{0,}'s{0,}$/"));

将如您所期望的一样工作

铸造文件

NULL总是转换为空字符串。

http://php.net/manual/en/language.types.string.php#language.types.string.casting