
<title>表单验证类 Validator
for PHP β</title>

<style>



body,td
...{font:normal 12px Verdana;color:#333333}

input,textarea,select,td
...{font:normal 12px Verdana;color:#333333;border:1px solid #999999;background:#ffffff}

table
...{border-collapse:collapse;}

td
...{padding:3px}

input
...{height:20;}

textarea
...{width:80%;height:50px;overfmin:auto;}

form
...{display:inline}

</style>

<table align=
"center">

<form action=
"Validator.php" method=
"post">

<tr>

<td>提示模式:</td><td>

<select name=
"emode">

<option value=
"1">警告提示框(客户端)</option>

<option value=
"2">提示框加红色文字提示</option>

<option value=
"3">附加红色提示</option>

<option value=
"4">警告提示框(服务器端)</option>

<option value=
"5">文字提示(服务器端)</option>

</select></td>

</tr>

<tr>

<td>真实姓名:</td><td><input name=
"Name"></td>

</tr>

<tr>

<td>英文名:</td><td><input name=
"Nick"></td>

</tr>

<tr>

<td>主页:</td><td><input name=
"Homepage"></td>

</tr>

<tr>

<td>密码:</td><td><input name=
"Password"></td>

</tr>

<tr>

<td>重复:</td><td><input name=
"Repeat"></td>

</tr>

<tr>

<td>信箱:</td><td><input name=
"Email"></td>

</tr>

<tr>

<td>信箱:</td><td><input name=
"Email1"></td>

</tr>

<tr>

<td>QQ:</td><td><input name=
"QQ"></td>

</tr>

<tr>

<td>身份证:</td><td><input name=
"Card"></td>

</tr>

<tr>

<td>年龄:</td><td><input name=
"Year"></td>

</tr>

<tr>

<td>年龄1:</td><td><input name=
"Year1"></td>

</tr>

<tr>

<td>电话:</td><td><input name=
"Phone"></td>

</tr>

<tr>

<td>手机:</td><td><input name=
"Mobile"></td>

</tr>

<tr>

<td>生日:</td><td><input name=
"Birthday"></td>

</tr>

<tr>

<td>邮政编码:</td><td><input name=
"Zip"></td>

</tr>

<tr>

<td>邮政编码:</td><td><input name=
"Zip1"></td>

</tr>

<tr>

<td>操作系统:</td><td><select name=
"OS"><option value=
"">选择您所用的操作系统</option><option value="Win98
">Win98</option><option value="Win2k
">Win2k</option><option value="WinXP">WinXP</option></select></td>

</tr>

<tr>

<td>所在省份:</td><td>广东<input name=
"Province" value=
"1" type=
"radio">陕西<input name=
"Province" value=
"2" type=
"radio">浙江<input name=
"Province" value=
"3" type=
"radio">江西<input name=
"Province" value=
"4" type=
"radio"></td>

</tr>

<tr>

<td>爱好:</td><td>运动<input name=
"Favorite" value=
"1" type=
"checkbox">上网<input name=
"Favorite" value=
"2" type=
"checkbox">听音乐<input name=
"Favorite" value=
"3" type=
"checkbox">看书<input name=
"Favorite" value=
"4" type=
"checkbox"></td>

</tr>

<td>自我介绍:</td><td><textarea name=
"Description">中文是一个字</textarea></td>

</tr>

<td>自传:</td><td><textarea name=
"History">中文是两个字节t</textarea></td>

</tr>

<tr>

<td colspan=
"2"><input name=
"Submit" type=
"submit" value=
"确定提交"></td>

</tr>

</form>

</table>

<script defer>
/*************************************************
Validator for PHP β 客户端脚本
code by 我佛山人
wfsr@cunite.com
http://www.cunite.com
*************************************************/


function dispError(items, messages, mode, separator)
...{
var iArray = items.split(separator);
for(var i=iArray.length-1;i>=0;i--)
iArray[i] = getObj(iArray[i]);
messages = ("以下原因导致提交失败:\t\t\t\t" + separator + messages).split(separator);

switch(mode)...{
case 2 :
for(i=iArray.length-1;i>=0;i--)
iArray[i].style.color = "red";
case 1 :
alert(messages.join("\n"));
iArray[0].focus();
break;
case 3 :

for(i=iArray.length-1;i>=0;i--)...{

try...{
var span = document.createElement("SPAN");
span.id = "__ErrorMessagePanel";
span.style.color = "red";
iArray[i].parentNode.appendChild(span);
span.innerHTML = messages[i+1].replace(/\d+:/,"*");
}
catch(e)...{alert(e.description);}
}
iArray[0].focus();
break;
}
}


function getObj(name)
...{
var objs = document.getElementsByName(name);
return objs[objs.length -1];
}

</script>

<?php

class Validator
...{
/*************************************************
Validator for PHP β 服务器端脚本
code by 我佛山人
wfsr@cunite.com
http://www.cunite.com
*************************************************/
var $submit;
var $error_item, $error_message, $error_mode, $error_no;

function Validator($submit_name = "Submit", $mode = 5)...{
$this->submit = $submit_name;
$this->error_mode = $mode;
$this->error_no = 1;
}

function Validate($arr)...{
if(! isset($_POST[$this->submit])) return false;
$this->error_mode = $_POST["emode"];
echo "<script defer>document.getElementsByName(\"emode\")[0].selectedIndex =" . ($this->error_mode - 1) . "</script>";

if(is_array($arr))...{
$len = count($arr);

for($i = 0; $i < $len; $i++)...{
$this->is_valid($arr[$i]);
}
}
if($this->error_no > 1)
$this->display_error();
}

function is_valid($str)...{
$str = split(",", $str);
if(count($str) < 3) return false;
$name = trim($str[0]);
$message = trim($str[1]);
$data_type = trim($str[2]);
$value = trim($_POST[$name]);

switch($data_type)...{
case "compare" :
break;
case "range" :
break;
case "repeat" :
break;
default :
$method = "is_".$data_type;
if(!$this->$method($value))
$this->add_error($name, $message);
break;
}
}

function add_error($name, $message)...{
$this->error_item .= "," . $name;
$this->error_message .= "," . $this->error_no . ":" . $message;
$this->error_no ++;
}

function display_error()...{
$this->error_item = ereg_replace("^,+", "", $this->error_item);
$this->error_message = ereg_replace("^,+", "", $this->error_message);

switch($this->error_mode)...{
case 4 :
$info = "以下原因导致提交失败:\t\t\t\t,";
echo "<script>alert(\"".join("\\n", split(",", $info . $this->error_message))."\")</script>";
//print >>>end;
break;
case 5 :
echo "输入有错误:<br /><ul><li>" . ereg_replace( "\b\d+:", "",join("</li><li>", split(",", $this->error_message))) . "</li></ul>";
echo "<br /><a href='javascript:history.back()'>返回</a>";
exit;
break;
default :
echo "<script defer>dispError(\"" . $this->error_item . "\", \"" . $this->error_message . "\", " . $this->error_mode . ", \",\")</script>";
break;
}
}

function is_email($str)...{
return preg_match("/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/", $str);
}

function is_url($str)...{
return preg_match("/^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"])*$/", $str);
}

function is_qq($str)...{
return preg_match("/^[1-9]\d...{4,8}$/", $str);
}

function is_zip($str)...{
return preg_match("/^[1-9]\d...{5}$/", $str);
}

function is_idcard($str)...{
return preg_match("/^\d...{15}(\d{2}[A-Za-z0-9])?$/", $str);
}

function is_chinese($str)...{
return ereg("^[".chr(0xa1)."-".chr(0xff)."]+$",$str);
}

function is_english($str)...{
return preg_match("/^[A-Za-z]+$/", $str);
}

function is_mobile($str)...{
return preg_match("/^((\(\d...{3}\))|(\d{3}\-))?13\d{9}$/", $str);
}

function is_phone($str)...{
return preg_match("/^((\(\d...{3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}$/", $str);
}

function is_safe($str)...{
return (preg_match("/^(([A-Z]*|[a-z]*|\d*|[-_\~!@#\$%\^&\*\.\(\)\[\]\...{\}<>\?\\\/\'\"]*)|.{0,5})$|\s/", $str) != 0);
}
}

$v =
new Validator();

$v->Validate(array(
"Name,名字只允许中文,chinese",
"Nick, 只允许英文昵称, english",
"Homepage, 主页Url格式不正确, url",
"Password, 密码不符合安全规则, safe",
"Email,信箱格式错误,email",
"QQ, QQ号码不存在, qq",
"Card, 身份证号码不正确, idcard",
"Phone, 电话号码不存在, phone",
"Mobile, 手机号码不存在, mobile",
"Zip, 邮政编码不存在, zip"));

?>
共有 0 条评论