hidensoft
Member
Strategy Pattern یا input Validator
بی شک یکی از مشکلات برنامه نویسان Valid کردن اطلاعات ورودی هست . معمولا هم ما با استفاده از IF ... ELSE کار خودمونو راه می ندازیم. اما بهتره از Strategy Pattern استفاده بشه . بی شک به شما خیلی بیشتر کمک می کنه . برنامه هم خانایی بیشتری پیدا می کنه .
بهتره بریم سر اصل مطلب .
validator.php
index.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) < 6 ) {
$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) < 6 ) {
$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
}
?>
فکر نمی کنم نیاز به توضیح خاصی باشه .
موفق باشید.
پیوست ها
آخرین ویرایش: