ホームページ >バックエンド開発 >PHPチュートリアル >PHP 検証クラスを作成するだけで、優れた PHP プログラム (複数の検証ルールを含む) を作成する方法を教えます_PHP チュートリアル
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 アドレスと一致します
// QQ 番号と一致します
//中国の郵便番号と一致します
//IP アドレスを一致させる
//電話形式に一致します
//携帯電話の形式に一致します
//26 個の英語の文字を一致させます
// 中国語のみに一致します
// アカウントを確認します (文字で始まり、英数字とアンダースコアで構成され、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_nickname」、
);
プライベート$db;
パブリック関数__construct(){
$this->db = &load_system("データベース");
$this->set_role_name($this->role_name);
// ユーザー名が登録可能かどうかを判断します(ユーザー名の重複を防ぐため)
パブリック関数 is_username($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 を返します;
}
}