一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

php javascript表单验证实现方法

时间:2010-11-18 编辑:简简单单 来源:一聚教程网



sample 1




 


 
 


 
 


 
 


 
 


 
 


 
 


 
 


 
 


 
 


 
 


 
 

sample 1

username:
password:
e-mail:
membership:
 
 
age:
 
 
 
  yyyy/mm/dd
 
sex:
  male
  female
 
details:
 
 

  0 out of 20 characters
 
categories:
 
 

  use ctrl+mouse to select multiple categories
 
newsletters:
  cars

  computers

  dogs

  food
 

 
  by checking this box you agree to some terms
 




把下面代码保存成php文件
$form_validation_alerts = array(
    '>'      => "%%name%% should be more than %%num%%!",
    '<'      => "%%name%% should be less than %%num%%!",
    '>='     => "%%name%% should be more or equal to %%num%%!",
    '<='     => "%%name%% should be less or equal to %%num%%!",
    'ch'     => "%%name%% contains invalid characters!",
    'chnum_' => "%%name%% contains invalid characters!",
    'cnt >'  => "you should select more than %%num%% %%name%%!",
    'cnt <'  => "you should select less than %%num%% %%name%%!",
    'cnt >=' => "you should select at least %%num%% %%name%%!",
    'cnt <=' => "you should select at most %%num%% %%name%%!",
    'cnt ==' => "you should select %%num%% %%name%%!",
    'date'   => "please, enter a valid %%name%%!",
    'email'  => "please, enter a valid e-mail address!",
    'empty'  => "please, enter %%name%%!",
    'len >'  => "%%name%% should contain more than %%num%% characters!",
    'len <'  => "%%name%% should contain less than %%num%% characters!",
    'len >=' => "%%name%% should contain at least %%num%% characters!",
    'len <=' => "%%name%% should contain at most %%num%% characters!",
    'len ==' => "%%name%% should contain %%num%% characters!",
    'num'    => "%%name%% is not a valid number!",
    'radio'  => "please, select %%name%%!",
    'select' => "please, select %%name%%!",
    'terms'  => "you must agree to the terms first!");

function form_validation_alert($type, $name, $num)
{
  $name = preg_replace('/^w*(w*)w*$/', "$1", $name);

  $msg = $globals['form_validation_alerts'][$type];
  $msg = str_replace('%%name%%', strtoupper(substr($name, 0, 1)) . strtolower(substr($name, 1, strlen($name)-1)), $msg);
  $msg = str_replace('%%name%%', strtolower($name), $msg);
  $msg = str_replace('%%num%%', $num, $msg);

  return $msg;
}

// ***** isnan *****************************************************************

function form_validation_isnan($value)
{
  return (string)(integer)$value !== (string)$value;
}

// ***** validate **************************************************************

function form_validation_validate($data, $rules)
{
  $rules = preg_replace('/^(s*)(s.*)/', "$2", $rules);
  $rules = preg_split('/s*;s*/', $rules);

  foreach ($rules as $i => $rule)
  {
    $rule = preg_split('/s*:s*/', $rule);

    if (count($rule) < 2) continue;

    $rule[0] = preg_split('/s+/', $rule[0]);
    $rule[1] = preg_split('/s+/', $rule[1]);

    foreach ($rule[0] as $j => $name)
    {
      $name = str_replace("[]", "", $name);

      if (!in_array($rule[1][0], array('cnt', 'radio', 'terms')))
        if (!isset($data[$name])) return 'invalid form!';

      if (!in_array($rule[1][0], array('cnt')))
        if ( isset($data[$name]) && is_array($data[$name])) return 'invalid form!';

      switch ($rule[1][0])
      {
        // ***** comparison *****

        case '>':
          if (form_validation_isnan($data[$name]))
            return form_validation_alert('num', $name, 0);
          if ($data[$name] <= $rule[1][1])
            return form_validation_alert('>', $name, $rule[1][1]);
          break;

        case '<':
          if (form_validation_isnan($data[$name]))
            return form_validation_alert('num', $name, 0);
          if ($data[$name] >= $rule[1][1])
            return form_validation_alert('<', $name, $rule[1][1]);
          break;

        case '>=':
          if (form_validation_isnan($data[$name]))
            return form_validation_alert('num', $name, 0);
          if ($data[$name] < $rule[1][1])
            return form_validation_alert('>=', $name, $rule[1][1]);
          break;

        case '<=':
          if (form_validation_isnan($data[$name]))
            return form_validation_alert('num', $name, 0);
          if ($data[$name] > $rule[1][1])
            return form_validation_alert('<=', $name, $rule[1][1]);
          break;

        // ***** ch *****

        case 'ch':
          if (!preg_match('/^([a-za-z]+)$/', $data[$name]))
            return form_validation_alert('ch', $name, 0);
          break;

        // ***** chnum_ *****

        case 'chnum_':
          if (!preg_match('/^(w+)$/', $data[$name]))
            return form_validation_alert('chnum_', $name, 0);
          break;

        // ***** cnt *****

        case 'cnt':
          $cnt = isset($data[$name]) ? (is_array($data[$name]) ? count($data[$name]) : 1) : 0;
          if ($rule[1][1] == '>' && $cnt <= $rule[1][2])
            return form_validation_alert('cnt >', $name, $rule[1][2]);
          if ($rule[1][1] == '<' && $cnt >= $rule[1][2])
            return form_validation_alert('cnt <', $name, $rule[1][2]);
          if ($rule[1][1] == '>=' && $cnt < $rule[1][2])
            return form_validation_alert('cnt >=', $name, $rule[1][2]);
          if ($rule[1][1] == '<=' && $cnt > $rule[1][2])
            return form_validation_alert('cnt <=', $name, $rule[1][2]);
          break;

        // ***** email *****

        case 'email':
          if (!preg_match('/^(w+.)*(w+)@(w+.)+(w+)$/', $data[$name]))
            return form_validation_alert('email', $name, 0);
          break;

        // ***** empty *****

        case 'empty':
          if ($data[$name] == '')
            return form_validation_alert('empty', $name, 0);
          break;

        // ***** len *****

        case 'len':
          if ($rule[1][1] == '>' && strlen($data[$name]) <= $rule[1][2])
            return form_validation_alert('len >', $name, $rule[1][2]);
          if ($rule[1][1] == '<' && strlen($data[$name]) >= $rule[1][2])
            return form_validation_alert('len <', $name, $rule[1][2]);
          if ($rule[1][1] == '>=' && strlen($data[$name]) < $rule[1][2])
            return form_validation_alert('len >=', $name, $rule[1][2]);
          if ($rule[1][1] == '<=' && strlen($data[$name]) > $rule[1][2])
            return form_validation_alert('len <=', $name, $rule[1][2]);
          break;

        // ***** num *****

        case 'num':
          if (form_validation_isnan($data[$name]))
            return form_validation_alert('num', $name, 0);
          break;

        // ***** radio *****

        case 'radio':
          if (!isset($data[$name]))
            return form_validation_alert('radio', $name, 0);
          break;

        // ***** select *****

        case 'select':
          if (!isset($data[$name]))
            return form_validation_alert('select', $name, 0);
          break;

        // ***** terms *****

        case 'terms':
          if (!isset($data[$name]))
            return form_validation_alert('terms', $name, 0);
          break;
      }
    }

    // ***** date *****

    if ($rule[1][0] == 'date')
    {
      $year  = $rule[0][0];
      $month = $rule[0][1];
      $day   = $rule[0][2];

      if (form_validation_isnan($data[$year ]))
        return form_validation_alert('date', $year,  0);
      if (form_validation_isnan($data[$month]) || $data[$month] < 0 || $data[$month] > 12)
        return form_validation_alert('date', $month, 0);
      if (form_validation_isnan($data[$day  ]) || $data[$day  ] < 0 || $data[$day  ] > 31 || !checkdate($data[$month], $data[$day], $data[$year]))
        return form_validation_alert('date', $day,   0);
    }
  }

  return true;
}

热门栏目