2014年5月27日 星期二

PHP正則表達式-使用preg_match()過濾字串

資料來源
http://newaurora.pixnet.net/blog/post/171424314-php%E6%AD%A3%E5%89%87%E8%A1%A8%E9%81%94%E5%BC%8F-%E4%BD%BF%E7%94%A8preg_match()%E9%81%8E%E6%BF%BE%E5%AD%97%E4%B8%B2

在網頁程式撰寫的時候,經常需要把使用者輸入的字串做過濾
但有些時候並非惡意攻擊字串
可能使用者只是輸入錯誤
因此我們需要做一些基本的檢查來預防和提式
下面是使用 preg_match() 這個函數來檢查字串的方式

    首先先簡單介紹一下 preg_match() 這個函數的用法
    preg_match( 正則表達式 , 要比對的字串 , 比對結果)
    其中比對結果是一個陣列,其中陣列結果是 $result[0]=原字串、$result[1]=第一個符合規則的字串、$result[2]=第二個符合規則的字串...以此類推
    比對結果則回傳 1(正確) 或是 0(錯誤)
    下面是一個簡單的範例

        if(preg_match($regex, $resource , $result)) {
            echo "OK";
        } else {
            echo "error";
        }

       另外附上幾個常用的表達式

       //A. 檢查是不是數字
       $standard_A = "/^([0-9]+)$/"; 
       //B. 檢查是不是小寫英文
       $standard_B = "/^([a-z]+)$/";
       //C. 檢查是不是大寫英文
       $standard_C = "/^([A-Z]+)$/";
       //D. 檢查是不是全為英文字串
       $standard_D = "/^([A-Za-z]+)$/"; 
       //E. 檢查是不是英數混和字串
       $standard_E = "/^([0-9A-Za-z]+)$/";
       //F. 檢查是不是中文
       $standard_F = "/^([\x7f-\xff]+)$/"; 
       //G. 檢查是不是電子信箱格式
       //$standard_G_1 這組正則允許 "stanley.543-ok@myweb.com" 
       //但 $standard_G_2 僅允許 "stanley543ok@myweb.com" ,字串內不包含 .(點)和 -(中線) 
       $standard_G_1 = "/^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/";
       $standard_G_2 = "/^[\w]*@[\w-]+(\.[\w-]+)+$/" ;
       //下面則是個簡單的範例,大家可以嘗試看看

       $string = "stanley.543-ok@myweb.com" ;
       $standard_G_1 = "/^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/";
       $standard_G_2 = "/^[\w]*@[\w-]+(\.[\w-]+)+$/" ;
       function checkString($strings, $standard){
           if(preg_match($standard, $strings, $hereArray)) {
              return 1;
           } else {
              return 0;
           }
       }

       echo checkString($string, $standard_G_1);
       echo "
";
       echo checkString($string, $standard_G_2);


如果覺得對你有幫助的話. 麻煩幫小弟按個讚哦~

其他相關文章參考:


在 php.ini 中設定 magic_quotes_gpc = Off / On
是指 所有 GET、POST 和 COOKIE 的資料 都自動以 addslashes() 處理過

http://mini.nidbox.com/diary/read/7698772


沒有留言: