加入收藏 | 设为首页 | 会员中心 | 我要投稿 我爱制作网_池州站长网 (https://www.0566zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php 简单的登录表单验证,PHP最简单的表单验证库?

发布时间:2022-12-16 11:15:38 所属栏目:PHP教程 来源:
导读:  * @version 1.0

  * @access public

  */

  class FormValidator

  {

  public static $regexes = Array(

  'date' => "^[0-9]{4}[-/][0-9]{1,2}[-/][0-9]{1,2}\$"
  * @version 1.0
 
  * @access public
 
  */
 
  class FormValidator
 
  {
 
  public static $regexes = Array(
 
  'date' => "^[0-9]{4}[-/][0-9]{1,2}[-/][0-9]{1,2}\$",
 
  'amount' => "^[-]?[0-9]+\$",
 
  'number' => "^[-]?[0-9,]+\$",
 
  'alfanum' => "^[0-9a-zA-Z ,.-_\\s\?\!]+\$",
 
  'not_empty' => "[a-z0-9A-Z]+",
 
  'words' => "^[A-Za-z]+[A-Za-z \\s]*\$",
 
  'phone' => "^[0-9]{10,11}\$",
 
  'zipcode' => "^[1-9][0-9]{3}[a-zA-Z]{2}\$",
 
  'plate' => "^([0-9a-zA-Z]{2}[-]){2}[0-9a-zA-Z]{2}\$",
 
  'price' => "^[0-9.,]*(([.,][-])|([.,][0-9]{2}))?\$",
 
  '2digitopt' => "^\d+(\,\d{2})?\$",
 
  '2digitforce' => "^\d+\,\d\d\$",
 
  'anything' => "^[\d\D]{1,}\$"
 
  );
 
  private $validations, $sanatations, $mandatories, $errors, $corrects, $fields;
 
  public function __construct($validations=array(), $mandatories = array(), $sanatations = array())
 
  {
 
  $this->validations = $validations;
 
  $this->sanatations = $sanatations;
 
  $this->mandatories = $mandatories;
 
  $this->errors = array();
 
  $this->corrects = array();
 
  }
 
  /**
 
  * Validates an array of items (if needed) and returns true or false
 
  *
 
  */
 
  public function validate($items)
 
  {
 
  $this->fields = $items;
 
  $havefailures = false;
 
  foreach($items as $key=>$val)
 
  {
 
  if((strlen($val) == 0 || array_search($key, $this->validations) === false) && array_search($key, $this->mandatories) === false)
 
  {
 
  $this->corrects[] = $key;
 
  continue;
 
  }
 
  $result = self::validateItem($val, $this->validations[$key]);
 
  if($result === false) {
 
  $havefailures = true;
 
  $this->addError($key, $this->validations[$key]);
 
  }
 
  else
 
  {
 
  $this->corrects[] = $key;
 
  }
 
  }
 
  return(!$havefailures);
 
  }
 
  /**
 
  *
 
  * Adds unvalidated class to thos elements that are not validated. Removes them from classes that are.
 
  */
 
  public function getScript() {
 
  if(!empty($this->errors))
 
  {
 
  $errors = array();
 
  foreach($this->errors as $key=>$val) { $errors[] = "'INPUT[name={$key}]'"; }
 
  $output = '$$('.implode(',', $errors).').addClass("unvalidated");';
 
  $output .= "alert('there are errors in the form');"; // or your nice validation here
 
  }
 
  if(!empty($this->corrects))
 
  {
 
  $corrects = array();
 
  foreach($this->corrects as $key) { $corrects[] = "'INPUT[name={$key}]'"; }
 
  $output .= '$$('.implode(',', $corrects).').removeClass("unvalidated");';
 
  }
 
  $output = "";
 
  return($output);
 
  }
 
  /**
 
  *
 
  * Sanatizes an array of items according to the $this->sanatations
 
  * sanatations will be standard of type string, but can also be specified.
 
  * For ease of use, this syntax is accepted:
 
  * $sanatations = array('fieldname', 'otherfieldname'=>'float');
 
  */
 
  public function sanatize($items)
 
  {
 
  foreach($items as $key=>$val)
 
  {
 
  if(array_search($key, $this->sanatations) === false && !array_key_exists($key, $this->sanatations)) continue;
 
  $items[$key] = self::sanatizeItem($val, $this->validations[$key]);
 
  }
 
  return($items);
 
  }
 
  /**
 
  *
 
  * Adds an error to the errors array.
 
  */
 
  private function addError($field, $type='string')
 
  {
 
  $this->errors[$field] = $type;
 
  }
 
  /**
 
  *
 
  * Sanatize a single var according to $type.
 
  * Allows for static calling to allow simple sanatization
 
  */
 
  public static function sanatizeItem($var, $type)
 
  {
 
  $flags = NULL;
 
  switch($type)
 
  {
 
  case 'url':
 
  $filter = FILTER_SANITIZE_URL;
 
  break;
 
  case 'int':
 
  $filter = FILTER_SANITIZE_NUMBER_INT;
 
  break;
 
  case 'float':
 
  $filter = FILTER_SANITIZE_NUMBER_FLOAT;
 
  $flags = FILTER_FLAG_ALLOW_FRACTION | FILTER_FLAG_ALLOW_THOUSAND;
 
  break;
 
  case 'email':
 
  $var = substr($var, 0, 254);
 
  $filter = FILTER_SANITIZE_EMAIL;
 
  break;
 
  case 'string':
 
  default:
 
  $filter = FILTER_SANITIZE_STRING;
 
  $flags = FILTER_FLAG_NO_ENCODE_QUOTES;
 
  break;
 
  }
 
  $output = filter_var($var, $filter, $flags);
 
  return($output);
 
  }
 
  /**
 
  *
 
  * Validates a single var according to $type.
 
  * Allows for static calling to allow simple validation.
 
  *
 
  */
 
  public static function validateItem($var, $type)
 
  {
 
  if(array_key_exists($type, self::$regexes))
 
  {
 
  $returnval = filter_var($var, FILTER_VALIDATE_REGEXP, array("options"=> array("regexp"=>'!'.self::$regexes[$type].'!i'))) !== false;
 
  return($returnval);
 
  }
 
  $filter = false;
 
  switch($type)
 
  {
 
  case 'email':
 
  $var = substr($var, 0, 254);
 
  $filter = FILTER_VALIDATE_EMAIL;
 
  break;
 
  case 'int':
 
  $filter = FILTER_VALIDATE_INT;
 
  break;
 
  case 'boolean':
 
  $filter = FILTER_VALIDATE_BOOLEAN;
 
  break;
 
  case 'ip':
 
  $filter = FILTER_VALIDATE_IP;
 
  break;
 
  case 'url':
 
  $filter = FILTER_VALIDATE_URL;
 
  break;
 
  }
 
  return ($filter === false) ? false : filter_var($var, $filter) !== false ? true : false;
 
  }
 
  }
 
  现在这需要mootools为您在这里看到的一些javascript,但你可以很容易地改变到你最喜欢的javascript框架。它所做的就是查找元素PHP表单验证,并向其添加’unvalidated’CSS类。
 
  用法就像我一直想要的那样简单:
 
  例:
 
  $validations = array(
 
  'name' => 'anything',
 
  'email' => 'email',
 
  'alias' => 'anything',
 
  'pwd'=>'anything',
 
  'gsm' => 'phone',
 
  'birthdate' => 'date');
 
  $required = array('name', 'email', 'alias', 'pwd');
 
  $sanatize = array('alias');
 
  $validator = new FormValidator($validations, $required, $sanatize);
 
  if($validator->validate($_POST))
 
  {
 
  $_POST = $validator->sanatize($_POST);
 
  // now do your saving, $_POST has been sanatized.
 
  die($validator->getScript()."");
 
  }
 
  else
 
  {
 
  die($validator->getScript());
 
  }
 
  要验证只有一个元素:
 
  $validated = new FormValidator()->validate('blah@bla.', 'email');
 
  只保存一个元素:
 
  $sanatized = new FormValidator()->sanatize('blah', 'string');
 
  这个类最酷的是,你可以发送你的表单与ajax或iframe目标,并执行生成的脚本。不需要刷新页面或重新发送相同的表单数据回到浏览器:)另外,如果脚本需要更改,没有困难的overdesigned框架来分析,只是改变它任何你想要的方式:)
 
  哦,是的,随时使用这个任何地方你想要的。
 

(编辑:我爱制作网_池州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!