作者:LAMP小白 点击:2705 发布日期:2012-12-02 21:32:00 返回列表
写了太多的传参为空和类型转换,今天下定决心吧他们写成AOP,在实际敲码时发现使用正则进行判断,第一麻烦第二效率不高,
于是使用PHP自带的验证来实现,毕竟C比PHP快了不少,也不用我自己去维护规则
if( empty($name) || empty($mail) || empty($psw) || empty($pswre) || $psw != $pswre) _err::show('请将填写完整', '有一个或多个选项为空或两次输入的密码不一致~'); if(userAop::check_name($name)) _err::show('昵称已被占用', '这个昵称已被占用了,换一个吧~'); $data = array( 'name' =mio_gt; $_POST['name'], 'psw' =mio_gt; sha1($_POST['psw']), 'mail' =mio_gt; $_POST['mail'], 'avatar' =mio_gt; 'null', 'gender' =mio_gt; 'G', 'add_time'=mio_gt; date('Y-m-d H:i:s') ); if( _model('user')-mio_gt;IN($data) ) { _header::location(); } else { _err::show('注册失败', '对不起注册失败了~'); }
这种玩意写恶心了吧~哈哈 虽然有JS 但PHP也需要验证一次
static public function post( $param ) { $arr = array(); foreach($param as $k =mio_gt; $v) { $temp = explode( ' ', $v); if( empty($temp[0]) || empty($temp[1]) ) { _err::show('filter设置错误', '请检查filter数组格式' ); } $arr[$temp[1]] = self::filter($temp[0], $_POST[$k]); if( empty($arr[$temp[1]]) ) { _err::show( '数据错误', '一个或多个必要参数为空' ); } } return $arr; }
于是需要一个AOP来规范和统一数据验证
case 'MAIL': return filter_var($val, FILTER_VALIDATE_EMAIL);
这样返回的数组就是一个过滤完整的数组,再不用傻乎乎的一个一个去写接收了
关键点:
----------------华丽的分割线 PHP过滤参数 只翻译的功能 过滤规则自己看吧
PHP 5.2以上能使用
验证功能
验证有没有值
FILTER_VALIDATE_BOOLEAN
mio_quot;booleanmio_quot;
FILTER_NULL_ON_FAILURE
Returns TRUE for mio_quot;1mio_quot;, mio_quot;truemio_quot;, mio_quot;onmio_quot; and mio_quot;yesmio_quot;. Returns FALSE otherwise.
If FILTER_NULL_ON_FAILURE is set, FALSE is returned only for mio_quot;0mio_quot;, mio_quot;falsemio_quot;, mio_quot;offmio_quot;, mio_quot;nomio_quot;, and mio_quot;mio_quot;, and NULL is returned for all non-boolean values.
验证是否为邮箱
FILTER_VALIDATE_EMAIL
mio_quot;validate_emailmio_quot;
Validates value as e-mail.
FILTER_VALIDATE_FLOAT
mio_quot;floatmio_quot;
decimal
FILTER_FLAG_ALLOW_THOUSAND
Validates value as float.
验证是否是整型
FILTER_VALIDATE_INT
mio_quot;intmio_quot;
min_range, max_range
FILTER_FLAG_ALLOW_OCTAL, FILTER_FLAG_ALLOW_HEX
Validates value as integer, optionally from the specified range.
验证是否是IP
FILTER_VALIDATE_IP
mio_quot;validate_ipmio_quot;
FILTER_FLAG_IPV4, FILTER_FLAG_IPV6, FILTER_FLAG_NO_PRIV_RANGE, FILTER_FLAG_NO_RES_RANGE
Validates value as IP address, optionally only IPv4 or IPv6 or not from private or reserved ranges.
验证是否是正则
FILTER_VALIDATE_REGEXP
mio_quot;validate_regexpmio_quot;
regexp
验证是否是URL
Validates value against regexp, a Perl-compatible regular expression.
FILTER_VALIDATE_URL
mio_quot;validate_urlmio_quot;
FILTER_FLAG_PATH_REQUIRED, FILTER_FLAG_QUERY_REQUIRED
Validates value as URL (according to » http://www.faqs.org/rfcs/rfc2396), optionally with required components. Note that the function will only find ASCII URLs to be valid; internationalized domain names (containing non-ASCII characters)
will fail.
过滤功能
邮箱过滤
FILTER_SANITIZE_EMAIL
mio_quot;emailmio_quot;
Remove all characters except letters, digits and !#$%mio_mio_#39;*+-/=?^_`{|}~@.[].
过滤URL会对特殊字符进行编码
FILTER_SANITIZE_ENCODED
mio_quot;encodedmio_quot;
FILTER_FLAG_STRIP_LOW, FILTER_FLAG_STRIP_HIGH, FILTER_FLAG_ENCODE_LOW, FILTER_FLAG_ENCODE_HIGH
URL-encode string, optionally strip or encode special characters.
添加转义
FILTER_SANITIZE_MAGIC_QUOTES
mio_quot;magic_quotesmio_quot;
Apply addslashes().
浮点过滤
FILTER_SANITIZE_NUMBER_FLOAT
mio_quot;number_floatmio_quot;
FILTER_FLAG_ALLOW_FRACTION, FILTER_FLAG_ALLOW_THOUSAND, FILTER_FLAG_ALLOW_SCIENTIFIC
Remove all characters except digits, +- and optionally .,eE.
整型过滤
FILTER_SANITIZE_NUMBER_INT
mio_quot;number_intmio_quot;
Remove all characters except digits, plus and minus sign.
字符串过滤
FILTER_SANITIZE_SPECIAL_CHARS
mio_quot;special_charsmio_quot;
FILTER_FLAG_STRIP_LOW, FILTER_FLAG_STRIP_HIGH, FILTER_FLAG_ENCODE_HIGH
HTML-escape mio_#39;mio_quot;mio_lt;mio_gt;mio_ and characters with ASCII value less than 32, optionally strip or encode other special characters.
完整的字符串过滤(等于调用htmlspecialchars进行HTML实体化)
FILTER_SANITIZE_FULL_SPECIAL_CHARS
mio_quot;full_special_charsmio_quot;
FILTER_FLAG_NO_ENCODE_QUOTES,
Equivalent to calling htmlspecialchars() with ENT_QUOTES set. Encoding quotes can be disabled by setting FILTER_FLAG_NO_ENCODE_QUOTES. Like htmlspecialchars(), this filter is aware of the default_charset and if a sequence of bytes is
detected that makes up an invalid character in the current character set then the entire string is rejected resulting in a 0-length string.
只过滤标签
FILTER_SANITIZE_STRING
mio_quot;stringmio_quot;
FILTER_FLAG_NO_ENCODE_QUOTES, FILTER_FLAG_STRIP_LOW, FILTER_FLAG_STRIP_HIGH, FILTER_FLAG_ENCODE_LOW, FILTER_FLAG_ENCODE_HIGH, FILTER_FLAG_ENCODE_AMP
Strip tags, optionally strip or encode special characters.
只过滤标签的别名 - -
FILTER_SANITIZE_STRIPPED
mio_quot;strippedmio_quot;
Alias of mio_quot;stringmio_quot; filter.
过滤URL
FILTER_SANITIZE_URL
mio_quot;urlmio_quot;
Remove all characters except letters, digits and $-_.+!*mio_#39;(),{}|^~[]`mio_lt;mio_gt;#%mio_quot;;/?:@mio_=.
什么都不做,只进行编码
FILTER_UNSAFE_RAW
mio_quot;unsafe_rawmio_quot;
FILTER_FLAG_STRIP_LOW, FILTER_FLAG_STRIP_HIGH, FILTER_FLAG_ENCODE_LOW, FILTER_FLAG_ENCODE_HIGH, FILTER_FLAG_ENCODE_AMP
Do nothing, optionally strip or encode special characters.
上一篇:解决图片加载失效的问题 下一篇:快递查询API