【问题标题】:FILTER_VALIDATE_REGEXP emptyFILTER_VALIDATE_REGEXP 为空
【发布时间】:2015-03-25 11:05:12
【问题描述】:

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

如何验证空字段?我也想接受空的有效。

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

【问题讨论】:

    标签: php regex filter-input


    【解决方案1】:

    你的正则表达式匹配一个空字符串

    输入一无所获

    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

    【讨论】:

    • 使用 FILTER_VALIDATE_REGEXP 我只保留布尔 (TRUE/FALSE) 值,而不是字符串。我使用 POST 传递参数:page_name.php?q= 并且验证失败...
    猜你喜欢
    • 2012-06-15
    • 2016-03-28
    • 1970-01-01
    • 2014-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-24
    • 2012-01-04
    相关资源
    最近更新 更多