ホームページ >バックエンド開発 >PHPチュートリアル >PHP 検証クラスを作成するだけで、優れた PHP プログラム (複数の検証ルールを含む) を作成する方法を教えます_PHP チュートリアル

PHP 検証クラスを作成するだけで、優れた PHP プログラム (複数の検証ルールを含む) を作成する方法を教えます_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-14 10:11:001148ブラウズ

Web サイトを開発するときに、多くの人は単純な JS 検証のみを使用することがよくあります。誤って余分なカンマやピリオドを JS に記述すると、ie6 はそれを認識せず、検証を直接スキップします。実際、最も安全な方法は、ユーザーが入力したデータをサーバー側で検証することです。私は簡単な PHP 検証クラスを作成しました。このクラスには、参照用のさまざまな検証ルールが含まれています。元のリンク


[php]
/**
* ユーザー入力ルール検証クラス
* 著者 張海寧
*日付2013-05-23
​*/
クラス検証{
// 検証ルール
プライベート $role_name = array(
// Ver空かどうかを確認します
「必須」、

                                                                                                                                                                                                        「メール」、

to 'to’ to 'to s to' to ’to’ to d's 's to
'idcode'、

// 一致する数字 配 「数字」、

// http アドレスと一致します
'http'、

// QQ番号に一致 配 'qq'、

//中国の郵便番号と一致します
「郵便番号」、

// IP アドレスと一致します
'ip'、

//電話形式に一致します
「電話」、

に " 「モバイル」、

//26 個の英字を一致させます
'en_word'、

// 中国語配のみに一致 'cn_word'、

// アカウントを確認します (文字で始まり、英数字とアンダースコアで構成され、4 ~ 20 バイト)
'user_account'、
);

/**
* 【認証機能】
* @param [配列] $data [ユーザーが検証するデータ]
* @param [配列] $validate_role [検証ルール]
* @param [配列] $validate_err_msg [エラーメッセージ]
* @return [bool] [成功した場合は true、失敗した場合はエラー メッセージを返す]
​​*/
パブリック関数 verify($data, $validate_role, $validate_err_msg=''){
If(empty($data)) は false を返します
If(empty($validate_role)) は false を返します
foreach ($data as $key => $value) {
$key = strto lower($key); foreach ($validate_role as $kk => $vv) {
$kk = strto lower($kk); If($key == $kk){
                    foreach ($vv as $k => $v) {
                        $k = strto lower($k); 
                        if( !in_array($k, $this->role_name)) return 'ロール名 "'.$k.'" が見つかりません!'; 
                        if($v == true){
                            if ( !$this->$k($value) ){
                                if (!isset($validate_err_msg[$kk][$k]))
                                'var '.$key'を返します。 '.$k' 内定期的な検証が失敗しました!'; 
                                $validate_err_msg[$kk][$k]を返します; 
                            }
                        }
                    }
                }
            }
        }
        true を返します。 
    }
 
    // 获取规则数组
    パブリック関数 get_role_name(){
        $this->role_nameを返します; 
    }
 
    // 配置プロパティ规则
    パブリック関数 set_role_name($arr){
        $this->role_name = array_merge($this->role_name, $arr); 
    }
 
    // 验证が空かどうか
    パブリック関数が必要です($str){
        if(trim($str) != "") true を返します。 
        false を返します。 
    }
 
    // 验证邮件格式
    公開機能メール($str){
        if(preg_match("/^([a-zA-Z0-9]+[_|_|.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+ [_|_|.]?)*[a-zA-Z0-9]+.[a-zA-Z]{2,3}$/", $str)) true を返します。 
        それ以外の場合は false を返します。 
    }
 
    // 验证身份证
    パブリック関数 IDcode($str){
        if(preg_match("/^d{14}(d{1}|d{4}|(d{3}[xX]))$/", $str)) true を返します。 
        それ以外の場合は false を返します。 
    }
 
    // 验证http地址
    パブリック関数 http($str){
        if(preg_match("/[a-zA-Z]+://[^s]*/", $str)) true を返します。 
        それ以外の場合は false を返します。 
    }
 
    //適合QQ号(QQ号从10000开始)
    パブリック関数 qq($str){
        if(preg_match("/^[1-9][0-9]{4,}$/", $str)) true を返します。 
        それ以外の場合は false を返します。 
    }
 
//中国の郵便番号と一致します
パブリック関数郵便番号($str){
If(preg_match("/^[1-9]d{5}$/", $str)) は true を返します。 それ以外の場合は false を返します。 }

// IP アドレスと一致します
パブリック関数 ip($str){
If(preg_match("/^d{1,3}.d{1,3}.d{1,3}.d{1,3}$/", $str)) true を返します
それ以外の場合は false を返します
}

// 電話形式に一致します
公衆機能電話($str){
If(preg_match("/^d{3}-d{8}$|^d{4}-d{7}$/", $str)) true を返します
それ以外の場合は false を返します
}

// 携帯電話の形式に一致します
パブリック関数モバイル($str){
If(preg_match("/^(13[0-9]|15[0-9]|18[0-9])d{8}$/", $str)) true を返します
それ以外の場合は false を返します。 }

// 26 個の英字を一致させます
パブリック関数 en_word($str){
If(preg_match("/^[A-Za-z]+$/", $str)) true を返します
それ以外の場合は false を返します。 }

// 中国語のみに一致します
パブリック関数 cn_word($str){
If(preg_match("/^[x80-xff]+$/", $str)) は true を返します。 それ以外の場合は false を返します。 }

// アカウントを確認します (文字で始まり、英数字とアンダースコアで構成され、4 ~ 20 バイト)
パブリック関数 user_account($str){
If(preg_match("/^[a-zA-Z][a-zA-Z0-9_]{3,19}$/", $str)) true を返します
それ以外の場合は false を返します。 }

// 認証番号
パブリック関数番号($str){
If(preg_match("/^[0-9]+$/", $str)) は true を返します
それ以外の場合は false を返します。 }
}

/**
* ユーザー入力ルール検証クラス
* 著者 張海寧
*日付 2013-05-23
​*/
クラス検証{

// 検証ルール

private $role_name = array(
// 空かどうかを確認します
「必須」、

// 一致するメールアドレス
「メール」、

// ID カードと一致します
「IDコード」、

// 数字を一致させる

「番号」、


// http アドレスと一致します

「http」、


// QQ 番号と一致します

「qq」、


//中国の郵便番号と一致します

「郵便番号」、


//IP アドレスを一致させる

「ip」、


//電話形式に一致します

「電話」、


//携帯電話の形式に一致します

「モバイル」、


//26 個の英語の文字を一致させます

「en_word」、


// 中国語のみに一致します

「cn_word」、


// アカウントを確認します (文字で始まり、英数字とアンダースコアで構成され、4 ~ 20 バイト)

'ユーザーアカウント',

);

/**
* 【認証機能】
* @param [配列] $data [ユーザーが確認したいデータ]
* @param [配列] $validate_role [検証ルール]
* @param [配列] $validate_err_msg [エラーメッセージプロンプト]
* @return [bool] [成功した場合は true、失敗した場合はエラー メッセージを返す]
​*/
 パブリック関数 verify($data, $validate_role, $validate_err_msg=''){
  if(empty($data)) return false;
  if(empty($validate_role)) return false;
  foreach ($data as $key => $value) {
   $key = strto lower($key);
   foreach ($validate_role as $kk => $vv) {
    $kk = strto lower($kk);
    if($key == $kk){
     foreach ($vv as $k => $v) {
      $k = strto lower($k);
      if( !in_array($k, $this->role_name)) return 'ロール名 "'.$k.'" が見つかりません!';
      if($v == true){
       if ( !$this->$k($value) ){
        if (!isset($validate_err_msg[$kk][$k]))
        'var '.$key'を返します。 '.$k' 内定期的な検証が失敗しました!';
        return $validate_err_msg[$kk][$k];
       }
      }
     }
    }
   }
  }
  true を返します;
 }

// 获取规则数组
 パブリック関数 get_role_name(){
  $this->role_name を返す;
 }

// 設置プロパティ规则
 パブリック関数 set_role_name($arr){
  $this->role_name = array_merge($this->role_name, $arr);
 }

// 验证は空かどうか
 パブリック関数が必要です($str){
  if(trim($str) != "") true を返します;
  false を返します;
 }

// 验证邮件格式
 公開機能メール($str){
  if(preg_match("/^([a-zA-Z0-9]+[_|_|.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+ [_|_|.]?)*[a-zA-Z0-9]+.[a-zA-Z]{2,3}$/", $str)) true を返します;
  それ以外の場合は false を返します;
 }

// 验证身份证
 パブリック関数 IDcode($str){
  if(preg_match("/^d{14}(d{1}|d{4}|(d{3}[xX]))$/", $str)) true を返します;
  それ以外の場合は false を返します;
 }

// 验证http地址
 パブリック関数 http($str){
  if(preg_match("/[a-zA-Z]+://[^s]*/", $str)) return true;
  それ以外の場合は false を返します;
 }

//適合QQ号(QQ号从10000开始)
 パブリック関数 qq($str){
  if(preg_match("/^[1-9][0-9]{4,}$/", $str)) true を返します;
  それ以外の場合は false を返します;
 }

//適合中国邮政编码
 パブリック関数郵便番号($str){
  if(preg_match("/^[1-9]d{5}$/", $str)) return true;
  それ以外の場合は false を返します;
 }

//適合ip地址
 パブリック関数 ip($str){
  if(preg_match("/^d{1,3}.d{1,3}.d{1,3}.d{1,3}$/", $str)) return true;
  それ以外の場合は false を返します;
 }

// 適合电话格式
 公衆電話($str){
  if(preg_match("/^d{3}-d{8}$|^d{4}-d{7}$/", $str)) return true;
  それ以外の場合は false を返します;
 }

// 適合手机格式
 パブリック関数モバイル($str){
  if(preg_match("/^(13[0-9]|15[0-9]|18[0-9])d{8}$/", $str)) true を返します;
  それ以外の場合は false を返します;
 }

// 適合26个英文字母
 パブリック関数 en_word($str){
  if(preg_match("/^[A-Za-z]+$/", $str)) return true;
  それ以外の場合は false を返します;
 }

// 適合只有中文
 パブリック関数 cn_word($str){
  if(preg_match("/^[x80-xff]+$/", $str)) true を返します;
  それ以外の場合は false を返します;
 }

// アカウントを確認します (文字で始まり、英数字とアンダースコアで構成され、4 ~ 20 バイト)
パブリック関数 user_account($str){
if(preg_match("/^[a-zA-Z][a-zA-Z0-9_]{3,19}$/", $str)) return true;
それ以外の場合は false を返します;
}

// 番号を確認します
パブリック関数番号($str){
if(preg_match("/^[0-9]+$/", $str)) true を返します;
それ以外の場合は false を返します;
}
}
メソッドの呼び出し


[php]
require('model/Validate.php'); $data = 配列(
"ユーザー名"=>'ningofaura@gmail.com'、
"qq"=>'593084029'、
「ニックネーム」=>「張海寧」、
"id"=>'24'、
);
$validate_role = array(
'ユーザー名'=>array(
'必須'=>true、
'メール'=>true、
)、
'qq'=>array(
'必須'=>true、
'qq'=>true、
)、
'ニックネーム'=>array(
'必須'=>true、
)、
'id'=>array(
'必須'=>true、
'number'=>true、
)、
);

$validate_err_msg = array(
'ユーザー名'=>array(
'required'=>「ユーザー名を空にすることはできません」、
'email'=>「メールの形式が正しくありません」、
)、
'qq'=>array(
'required'=>「qq を空にすることはできません」、
'qq'=>「qq 形式が正しくありません」、
)、
'ニックネーム'=>array(
'required'=>「ニックネームを空にすることはできません」、
)、
'id'=>array(
'required'=>「ID を空にすることはできません」、
'number'=>「数字ではありません」、
)、
);
$Validate = 新しい Validate(); $rt = $Validate->verify($data, $validate_role, $validate_err_msg); if ($rt !== true){
エコー $rt
出る
}

require('model/Validate.php');
$data = 配列(
    "ユーザー名"=>'ningofaura@gmail.com',
    "qq"=>'593084029',
    "ニックネーム"=>'张海宁',
    "id"=>'24',
    );
$validate_role = array(
    'ユーザー名'=>配列(
        '必須'=>true,
        'メール'=>true,
        )、
    'qq'=>配列(
        '必須'=>true,
        'qq'=>true、
        )、
    'ニックネーム'=>配列(
        '必須'=>true,
        )、
    'id'=>配列(
        '必須'=>true,
        'number'=>true,
        )、
    );

$validate_err_msg = array(
    'ユーザー名'=>配列(
        'required'=>"用户名は空にはできません",
        'email'=>"邮箱格式不正确",
        )、
    'qq'=>配列(
        'required'=>"qq は空にはできません",
        'qq'=>"qq格式不正确",
        )、
    'ニックネーム'=>配列(
        'required'=>"昵称は空にはなれません",
        )、
    'id'=>配列(
        'required'=>"id は空にはできません",
        'number'=>"数字ではありません",
        )、
    );
$Validate = 新しい Validate();
$rt = $Validate->verify($data, $validate_role, $validate_err_msg);
if ($rt !== true){
    エコー $rt;
    終了します;
}

当然のことながら、無法で十分な要求が得られれば、子类扩展を行う方法も可能です


[php]
/**
* ユーザーデータベースの非同期検証
* 著者 張海寧
*日付2013-05-23
​*/
class AjaxValidate extends Validate{
プライベート $role_name = array(
//ユーザー名が存在するかどうかを確認します 'is_username'、

// ニックネームが存在するかどうかを確認します
'is_nickname'、
);

プライベート $db

パブリック関数 __construct(){
$this->db = &load_system("データベース"); $this->set_role_name($this->role_name); }

// ユーザー名が登録可能かどうかを判断します (ユーザー名の重複を防ぐため)
パブリック関数 is_username($username){
$_username = $this->db->filter('s', $username); $sql = "username=".$_username のユーザーから ID を選択します。 If($this->db->num_rows($sql)){
false を返します。 }その他{
true を返します。 }
}

// ニックネームが利用可能かどうかを判断します (ニックネームの重複を防ぐため)
パブリック関数 is_nickname($nickname){
$_nickname = $this->db->filter('s', $nickname); $sql = "ニックネーム =.$_nickname のユーザーから ID を選択します。 If($this->db->num_rows($sql)){
false を返します
}その他{
true を返します。 }
}
}

/**
* ユーザーデータベースの非同期検証
* 著者 張海寧
*日付 2013-05-23
​*/
class AjaxValidate extends Validate{
private $role_name = array(
// ユーザー名が存在するかどうかを確認します

「is_username」、


// ニックネームが存在するかどうかを確認します
「is_nickname」、
);

プライベート$db;

パブリック関数__construct(){
$this->db = &load_system("データベース");
$this->set_role_name($this->role_name);

}


// ユーザー名が登録可能かどうかを判断します(ユーザー名の重複を防ぐため)
パブリック関数 is_username($username){

$_username = $this->db->filter('s', $username);

$sql = "username = "のユーザーから ID を選択します。$_username;

if($this->db->num_rows($sql)){

false を返します;
}その他{
true を返します;
}

}


// ニックネームが利用可能かどうかを判断します (ニックネームの重複を防ぐため)
パブリック関数 is_nickname($nickname){
$_nickname = $this->db->filter('s', $nickname);
$sql = "ニックネーム = ".$_nickname;
のユーザーから ID を選択 if($this->db->num_rows($sql)){
false を返します;
}その他{
true を返します;
}

}

}



www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/477434.html技術記事 Web サイトを開発するときに、多くの人は単純な JS 検証のみを使用することがよくあります。誤って余分なカンマやピリオドを JS に記述すると、ie6 はそれを認識せず、検証を直接スキップします。実際、最も安全なのは...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。