我正在尝试用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