انجمن عمومی گسترش فناوری آگو

نسخه‌ی کامل: ساخت کلاس validation با php
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
بی شک یکی از مشکلات برنامه نویسان Valid کردن اطلاعات ورودی هست . معمولا هم ما با استفاده از IF ... ELSE کار خودمونو راه می ندازیم. اما بهتره از Strategy Pattern استفاده بشه . بی شک به شما خیلی بیشتر کمک می کنه . برنامه هم خانایی بیشتری پیدا می کنه .
بهتره بریم سر اصل مطلب .

validator.php

کد php:
<?php
/**
 *  کلاس اصلی
 */
class Validator {
    
/**
    * Private
    * $errorMsg نگهداری خطا ها در صورت وجود
    */
    
var $errorMsg;
    
//! A constructor.
    /**
    * ساخت یک شی validator جدید
    */
    
function Validator () {
        
$this->errorMsg=array();
        
$this->validate();
    }
    
/**
    * @return void
    */
    
function validate() {
        
    }
    
/**
    * اضافه کردن خطا به آرایه
    * @return void
    */
    
function setError ($msg) {
        
$this->errorMsg[]=$msg;
    }
    
/**
    * بازگشت درست و غلط 
    * @return boolean
    */
    
function isValid () {
        if ( isset (
$this->errorMsg) ) {
            return 
false;
        } else {
            return 
true;
        }
    }
    
/**
    *  بدست آوردن خطا ها
    * @return string
    */
    
function getError () {
        return 
array_pop($this->errorMsg);
    }
}
/**
 *valid کردن username
 */
class ValidateUser extends Validator {
    
/**
    * $user متغیر مورد نیاز
    */
    
var $user;
    
/**
    * اخت یک شی validatoruser جدید
    * @param $user the string to validate
    */
    
function ValidateUser ($user) {
        
$this->user=$user;
        
Validator::Validator();
    }
    
/**
    * Validates کردن username
    * @return void
    */
    
function validate() {
        if (!
preg_match('/^[a-zA-Z0-9_]+$/',$this->user )) {
            
$this->setError('Username contains invalid characters');
        }
        if (
strlen($this->user) < ) {
            
$this->setError('Username is too short');
        }
        if (
strlen($this->user) > 20 ) {
            
$this->setError('Username is too long');
        }
    }
}
/**
 *  Validate کردن  password
 */
class ValidatePassword extends Validator {
    
/**
    * $pass متغیر مورد نیاز
    */
    
var $pass;
    
/**
    * $conf متغیر تکرار کلمه عبور
    */
    
var $conf;
    
/**
    * ساخت ValidatePassword شی جدید
    * @param $pass the string to validate
    * @param $conf to compare with $pass for confirmation
    */
    
function ValidatePassword ($pass,$conf) {
        
$this->pass=$pass;
        
$this->conf=$conf;
        
Validator::Validator();
    }
    
/**
    * Validates کردن  password
    * @return void
    */
    
function validate() {
        if (
$this->pass!=$this->conf) {
            
$this->setError('Passwords do not match');
        }
        if (!
preg_match('/^[a-zA-Z0-9_]+$/',$this->pass )) {
            
$this->setError('Password contains invalid characters');
        }
        if (
strlen($this->pass) < ) {
            
$this->setError('Password is too short');
        }
        if (
strlen($this->pass) > 20 ) {
            
$this->setError('Password is too long');
        }
    }
}
/**
 *  Validates کردن email address
 */
class ValidateEmail extends Validator {
    
/**
    * $email متغیر مورد نیاز
    */
    
var $email;
    
/**
    * جدید ValidateEmail ساخت شی
    * @param $email the string to validate
    */
    
function ValidateEmail ($email){
        
$this->email=$email;
        
Validator::Validator();
    }
    
/**
    * Validates کردن email address
    * @return void
    */
    
function validate() {
        
$pattern=
    
"/^([a-zA-Z0-9])+([\.a-zA-Z0-9_-])*@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-]+)+/";
        if(!
preg_match($pattern,$this->email)){
            
$this->setError('Invalid email address');
        }
        if (
strlen($this->email)>100){
            
$this->setError('Address is too long');
        }
    }
}
?>

index.php

کد php:
<?php
if ( $_POST['register'] ) {
    require_once(
'lib/Validator.php');
    
$v['u']=new ValidateUser($_POST['user']);
    
$v['p']=new ValidatePassword($_POST['pass'],$_POST['conf']);
    
$v['e']=new ValidateEmail($_POST['email']);
    foreach(
$v as $validator) {
        if (!
$validator->isValid()) {
            while (
$error=$validator->getError()) {
                
$errorMsg.="<li>".$error."</li>\n";
            }
        }
    }
    if (isset(
$errorMsg)) {
        print (
"<p>There were errors:<ul>\n".$errorMsg."</ul>");
    } else {
        print (
'<h2>Form Valid!</h2>');
    }
} else {
?>
<h2>Create New Account</h2>
<form action="<?php echo ($_SERVER['PHP_SELF']); ?>" method="post">
<p>Username: <input type="text" name="user"></p>
<p>Password: <input type="password" name="pass"></p>
<p>Confirm: <input type="password" name="conf"></p>
<p>Email: <input type="text" name="email"></p>
<p><input type="submit" name="register" value=" Register "></p>
</form>
<?php
}
?>
لینک مرجع