新しい正規表現が見つかると継続的に正規表現が更新されます
include "<span style="font-family: Consolas, 'Courier New', Courier, mono, serif; line-height: 18px;">ValidateParameterConfig.php</span>";
class Validation { private static function getRexp($rexp) { $_rexp = array ( 'letter_number'=>'/^[0-9A-Za-z]+$/',//只有字母数字包括大小写 'account'=>'/^[0-9A-Za-z_]+$/',//只有字母数字下划线包括大小写 'ids'=>'/^[0-9]+(\,[0-9]+)*$/',//验证多个id以','分割的类型 例如'1,2,3,4,5' 'number'=>'/^[0-9]+$/',//只可以使数字 'personal_card'=>'/^[0-9A-Za-z]+$/',//身份证 'email'=>'/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/',//邮箱 'date'=>'/^((((19|20)\d{2})-(0?(1|[3-9])|1[012])-(0?[1-9]|[12]\d|30))|(((19|20)\d{2})-(0?[13578]|1[02])-31)|(((19|20)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|((((19|20)([13579][26]|[2468][048]|0[48]))|(2000))-0?2-29))$/'//日期,包含了闰年 ); if (isset($_rexp[$rexp])) { return $_rexp[$rexp]; } else { return $rexp_not_defind; } } public static function validate($data, $config) { $_config = ValidateParameterConfig::getConfig($config); $k = self::allowExist($data, $_config); if ($k !== null) { return $k; } foreach($_config as $k=>$c) { if (isset($data[$k])) { if(isset($c['rexp'])) { if (self::vRexp( $data[$k], $c['rexp']) === false) { return $k; } } if (isset($c['length'])) { if (self::vLength($data[$k], $c['length'])) { return $k; } } if (isset($c['min_length'])) { if (!self::vMinLength($data[$k], $c['min_length'])) { return $k; } } if (isset($c['max_length'])) { if (!self::vMaxLength($data[$k], $c['max_length'])) { return $k; } } } } return null; } private static function allowExist($data, $config) { foreach ($config as $k=>$v) { if (!isset($v['allow_exist']) || $v['allow_exist'] == true) { if (!isset($data[$k])) { return $k; } } } return null; } public static function vRexp($data, $rexp) { $_rexp = self::getRexp($rexp); if (preg_match($_rexp, $data) == false) { return false; } return true; } public static function vLength($data, $l) { if (strlen(trim($data)) == $l) { return false; } return true; } public static function vMinLength($data, $l) { if (strlen(trim($data)) < $l) { return false; } return true; } public static function vMaxLength($data, $l) { if (strlen(trim($data)) > $l) { return false; } return true; } public static function vLetterNumber($data) { if (preg_match(self::getRexp('letter_number'), $data) == false) { return false; } return true; } public static function vLetterNumber_($data) { if (preg_match(self::getRexp('letter_number_'), $data) == false) { return false; } return true; } public static function vNumber($data) { if (preg_match(self::getRexp('number'), $data) == false) { return false; } return true; } public static function vEmail($data) { if (preg_match(self::getRexp('email'), $data) == false) { return false; } return true; }
class ValidateParameterConfig { public static function getConfig ($key) { //'allow_exist'=>true或allow_exist不存在表示该参数必传 $_config = array( 'test'=>array( 'letter_number'=>array('rexp'=>'letter_number', 'allow_exist'=>true), 'number'=>array('rexp'=>'number', 'min_length'=>1<span style="font-family: Arial, Helvetica, sans-serif;">'allow_exist'=>false</span>), 'account'=>array('rexp'=>'account', 'max_length'=>20), ) ); if (isset($_config[$key])) { return $_config[$key]; } else { return $config_not_defind; } }}
アプリケーションから送信されるパラメータは次のとおりです
$arr = array('letter_number'=>'abc123', 'account'=>'acb1234_');//参数验证$_msg = Validation::validate($arr, 'test');if ($_msg !== null) { return $_msg . ' is invalid parameter';}