PHP擴充之Filter詳解

來源:互聯網
上載者:User
簡介

 

Filter,它的作用就和他的名字一樣——過濾。Filter內建了多個常用過濾器,根據過濾器功能的不同,可以分成淨化過濾器(Sanitization)和驗證過濾器(Validation)兩種。兩種的差別在於,淨化過濾器會把被過濾的變數中不符合規則的東西清除掉,返回清除後的內容;而驗證過濾器只是驗證的功能,並不會去改變變數的值,如果符合過濾器的規則,則返回變數內容,否則返回false;

安裝

      Filter的安裝很簡單,如果是PHP5.2.0之後的版本,應該已經預設開啟了,可以通過phpinfo()來查看。如果5.2.0之前的版本,可以使用PECL來使用Filter

 

使用

使用filter來過濾或驗證資料很簡單,下面是一個簡單的例子

 

<?php$email1 = 'huanggy@example.org';$email2 = "example.org";$email3 = "(huanggy@example.org)";var_dump(filter_var($email1,FILTER_VALIDATE_EMAIL));var_dump(filter_var($email2,FILTER_VALIDATE_EMAIL));var_dump(filter_var($email3,FILTER_SANITIZE_EMAIL));?>

  執行上面的例子,你可以知道,filter_var($var,$filter)函數是使用過濾器$filter來過濾變數$var,而透過結果來分析,FILTER_VALIDATE_EMAIL過濾器只是驗證變數$email是否負責過濾器規定的規則,符合要求則返回變數內容,不符合則返回false;而FILTER_SANIZE_EMAIL則是對變數的內容進行淨化,把不負責規則的內容都清除,然後返回清除後的結果。

options參數的使用

 

<?php$int = 10;var_dump(filter_var($int,FILTER_VALIDATE_INT)); # 輸出int(10)$options = array('options'=>array('min_range'=>15));var_dump(filter_var($int,FILTER_VALIDATE_INT,$options));#輸出bool(false)?>

同樣的整形變數10,在我第二個過濾器中加兩個配置參數,最小值為15,10不滿足這個條件,所以返回fasle

 

再看下面這個例子

<?php$int = '0xf';var_dump(filter_var($int,FILTER_VALIDATE_INT)); # 輸出bool(false)$options = array('options'=>array('min_range'=>15),'flags'=>FILTER_FLAG_ALLOW_HEX);var_dump(filter_var($int,FILTER_VALIDATE_INT,$options));#輸出int(15)?>

預設FILTER_VALIDATE_INT過濾認為'0xf'不是整形變數,但是加了FLAGS附件參數FILTER_FLAG_ALLOW_HEX進去,FILTER_FLAG_ALLOW_HEX參數是允許使用十六進位的意思,'0xf'轉化為十六進位等於15,符合規則,返回15

 

注意:$options參數是一個數組,包含兩個元素:選項options(數組)和標記flags。若是只有flags元素,則也可以直接傳遞而不用數組。

選項options為一數組。數組關鍵字必須為:選項名稱。比如FILTER_VALIDATE_INT中的選項名稱有min_range、max_range;FILTER_VALIDATE_FLOAT中的選項名稱有decimal,FILTER_VALIDATE_REGEXP中的選項名稱有regexp。數組值根據選項名稱由使用者定義。比如min_range表示最小值過濾。比如:$options = array('options'=>array('min_range'=>3));那麼小於3的數字將無法通過驗證。

執行個體:

<?php$options = array();$options['options']['min_range'] = 1;$options['options']['max_range'] = 10;$options['flags'] = FILTER_FLAG_ALLOW_OCTAL;filter_var(3, FILTER_VALIDATE_INT, $options);?>

執行個體

<?php$foo = '256';$bar = '0x100';var_dump(validate_int($foo)); // false, too largevar_dump(validate_int($bar)); // false, too largefunction validate_int($input){  return filter_var(    $input,    FILTER_VALIDATE_INT,    // We must pass an associative array    // to include the range check options.    array(      'flags'   => FILTER_FLAG_ALLOW_HEX,      'options' => array('min_range' => 1, 'max_range' => 0xff)    )  );}?>

執行個體

<?phpecho "|asdf".chr(9).chr(128)."_123|";echo "\n";// "bitwise conjunction" means logic OR / bitwise |echo filter_var("|asdf".chr(9).chr(128)."_123\n|" ,FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH);/*Results:|asdf    �_123||asdf_123|*/?>

 

不得不說FILTER_VALIDATE_REGEXP 過濾器

如果系統內建的驗證過濾器無法滿足現實需要,我們可以通過FILTER_VALIDATE_REGEXP 過濾器來對資料進行驗證。

<?php//比如查詢關鍵字,要排除'、"、<、>、=字元,並限定關鍵字長度if(!filter_input(INPUT_GET,'keyword',FILTER_VALIDATE_REGEXP,array("options"=>array("regexp"=>"/^(^('|\"|<|>|=){1,30})/"))))  exit('關鍵字不符合要求');else  echo 'vaild';?>

 

PHP FILTER_CALLBACK 過濾器

定義和用法:FILTER_CALLBACK 過濾器使用使用者自訂函數對值進行過濾。這個過濾器為我們提供了對資料過濾的完全控制。

指定的函數必須存入名為 "options" 的關聯陣列中。

Name: "callback"
ID-number: 1024
提示和注釋
提示:您可以建立自己的函數,或者使用已有的 PHP 函數。

請參見下面的例子。

例子 1:調用自訂函數

<?phpfunction convertSpace($string){ return str_replace(" ", "_", $string);}$string = "Peter is a great guy!";echo filter_var($string, FILTER_CALLBACK,array("options"=>"convertSpace"));?>

輸出:Peter_is_a_great_guy!

例子 2:調用系統函數

<?php$string="Peter is a great guy!";echo filter_var($string, FILTER_CALLBACK,array("options"=>"strtoupper"));?>

輸出:PETER IS A GREAT GUY!

例子 3:調用類方法

<?phpclass MyFilter{  public function filter1($str){    return str_replace('9','6',$str);  }}echo filter_var('wo9w9w9',FILTER_CALLBACK,array('options'=>array('MyFilter','filter1')));//調用類方法?>

 

通過這種方式,就可以自訂一個過濾規則,通過FILTER_CALLBACK過濾器來過濾了

 

過濾器資料查閱

請訪問以下地址查閱:

1、http://www.54chen.com/p/intro.filter.html

2、http://www.w3school.com.cn/php/php_ref_filter.asp

3、http://cn2.php.net/manual/en/book.filter.php

 

本文參考:

http://blog.csdn.net/huanggy001/article/details/6149478

http://www.jb51.net/article/24532.htm

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.