PHP的数据验证包?

jed*_*ung 5 html php mysql forms validation

愚蠢的问题.

我有一个我正在用PHP工作的项目; 它是最终写入MySQL数据库的客户的注册表单.我已经为所涉及的字段进行了数据验证,我已经在使用PHP的一些内置过滤器功能了.

但是,我有很多字段需要为不同的目的进行验证 - 例如,我有电子邮件地址和网址来验证(过滤器包中有哪些内容),但我还要验证电话号码,邮政编码,地址和名称(仅应与特定字符集匹配).

现在,我的解决方案包含许多if-then语句来验证字段.例如,对于zipcode,我用ctype_digit验证它是否为数字,然后我使用strlen来检查长度.(我可以将所有内容封装在一个对象中 - 一旦我将所有内容都按照实际应用的方式完成,我可能会这样做 - 但这有点远.)有没有人知道第三方类会做这样的事情?或者,如果没有,至少是一种验证特定输入类型的方法,而不依赖于基于输入名称的if语句.既然它真的不可扩展?

如果我想编辑这个问题或添加任何内容,请告诉我.谢谢.

Ken*_*ins 1

查看FILTER_VALIDATE_REGEXP。它允许您进行自己的自定义验证。

$filter_zip_options = array( "options" => array( "regexp" => "/^[0-9]{5}$/" ) );
var_dump( (bool)filter_var( "99999", FILTER_VALIDATE_REGEXP, $filter_zip_options ) ); //bool(true)
var_dump( (bool)filter_var( "991999", FILTER_VALIDATE_REGEXP, $filter_zip_options ) ); //bool(false)
Run Code Online (Sandbox Code Playgroud)

如果您讨厌正则表达式,也可以使用FILTER_CALLBACK.

//To use a closure as an in place callback you need PHP 5.3
var_dump( filter_var( "Kendall", FILTER_CALLBACK, array( "options" => function( $input ) {
    //check if it's 1 or 2 words
    if( count( explode( " ", $input ) ) > 2 )
        return FALSE;

    return "Hello world $input";
} ) ) );
Run Code Online (Sandbox Code Playgroud)