表单验证 Validator v1.05

阅读更多

表单的验证一直是网页设计者头痛的问题,表单验证类 Validator就是为解决这个问题而写的,旨在使设计者从纷繁复杂的表单验证中解放出来,把精力集中于网页的设计和功能上的改进上。

Validator是基于JavaScript技术的伪静态类和对象的自定义属性,可以对网页中的表单项输入进行相应的验证,允许同一页面中同时验证多个表单,熟悉接口之后也可以对特定的表单项甚至仅仅是某个字符串进行验证。因为是伪静态类,所以在调用时不需要实例化,直接以"类名+.语法+属性或方法名"来调用。此外,Validator还提供3种不同的错误提示模式,以满足不同的需要。

Validator目前可实现的验证类型有:
[JavaScript] 版
Validator目前可实现的验证类型有:
1.是否为空;
2.中文字符;
3.双字节字符
4.英文;
5.数字;
6.整数;
7.实数;
8.Email地址;
9.使用HTTP协议的网址;
10.电话号码;
11.货币;
12.手机号码;
13.邮政编码;
14.身份证号码(1.05增强);
15.QQ号码;
16.日期;
17.符合安全规则的密码;
18.某项的重复值;
19.两数的关系比较;
20.判断输入值是否在(n, m)区间;
21.输入字符长度限制(可按字节比较);
22.对于具有相同名称的单选按钮的选中判断;
23.限制具有相同名称的多选按钮的选中数目;
24.自定义的正则表达式验证;
25.文件上传格式过滤(1.04)
运行环境(客户端):
在Windows Server 2003下用IE6.0+SP1和Mozilla Firefox 1.0测试通过;
在Lunix RedHat 9下的Netscape测试通过;

 

示例:

表单验证类 Validator v1.05
 
 


 
 
  
 
   
  
 
 
  
 
 
  
 
   
  
 
 
  
 
 
  
 
 
  
 
   
  
 
 
  
 
   
  
 
 
  
 
  
  
 
  
  
 
  
  
 
    
  
 
  
  
 
 
  
 
 
  
 
 
  
 
 
  
 
  
 
    
 
   
  
 
 
  
 
 
 
身份证号:
真实姓名:
ID:
英文名:
主页:
密码:
重复:
信箱:
信箱:
QQ:
身份证:
年龄:
年龄1:
电话:
手机:
生日:
邮政编码:
邮政编码:
操作系统:
所在省份:广东陕西浙江江西
爱好:运动上网听音乐看书
自我介绍:
自传:
相片上传:

 

更新历史:

1.01
修正对12月份的日期验证(感谢flylg999)

1.03
修正Range验证类型时将数字当字符串比较的bug(感谢cncom和xtlhnhbb)
修正日期验证(感谢Papsam)
增加Username验证类型
增加对Phone验证类型时支持分机号

1.04
增加文件格式的过滤,用于上传时限制上传的文件格式

1.05
增强对身份证号码的验证

 

php版:

表单验证类 Validator for PHP β
 
 



 
  
 
 
  
 
 
  
 
   
  
 
 
  
 
 
  
 
 
  
 
   
  
 
 
  
 
   
  
 
 
  
 
  
  
 
  
  
 
  
  
 
    
  
 
  
  
 
 
  
 
 
  
 
 
  
 
 
  
 
  
 
    
 
 
  
 
 
 
提示模式:
  
真实姓名:
英文名:
主页:
密码:
重复:
信箱:
信箱:
QQ:
身份证:
年龄:
年龄1:
电话:
手机:
生日:
邮政编码:
邮政编码:
操作系统:
所在省份:广东陕西浙江江西
爱好:运动上网听音乐看书
自我介绍:
自传:

 
class Validator{
 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 "";
  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 "";
    //print >>>end;
    break;
   case 5 :
    echo "输入有错误:

  • " . ereg_replace( "\b\d+:", "",join("
  • ", split(",", $this->error_message))) . "
";
    echo "
返回";
    exit;
    break;
   default :
    echo "";
   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"));
?>

 

asp版:

 

<%
 Class Validator
 Private Re, Dic
 Private Separator
 Private ErrorItem, ErrorMessage, ErrorMode, ErrorNo
 Private FormName, FormIndex, FilePath, GetMethod

 Private Sub Class_Initialize()
  Set Re = New RegExp
  Re.IgnoreCase = True
  Re.Global = True
  Set Dic = CreateObject("Scripting.Dictionary")
  Separator = ","
  ErrorItem = ""
  ErrorMessage = ""
  ErrorMode = 5
  ErrorNo = 1
  FilePath = Server.MapPath(Request.ServerVariables("Script_Name"))
  GetMethod = "FSO"
 End Sub

 Private Sub Class_Terminate()
  Set Re = Nothing
  Dic.RemoveAll()
  Set Dic = Nothing
 End Sub

 Public Sub Validate()
  IF Request("Submit")="" Then Exit Sub
  IF Not IsValidPost() Then Exit Sub

  With Dic
   .Add "Compare", "Compare( PostValue, operator, toObj)"
   .Add "Custom", "Custom( PostValue,regexp )"
   .Add "Date", "IsDateFormat( PostValue,format )"
   .Add "Limit", "Limit( PostValue,min, max )"
   .Add "LimitB", "LimitB( PostValue,min, max )"
   .Add "Range", "Range( PostValue,min, max )"
   .Add "Repeat", "IsEqual( PostValue, Request(toObj) )"
   .Add "Group", "Group( PostValue,min, max )"

   .Add "NotEqual", "Op1 <> Op2"
   .Add "GreaterThan", "Op1 > Op2"
   .Add "GreaterThanEqual", "Op1 >= Op2"
   .Add "LessThan", "Op1 < Op2"
   .Add "LessThanEqual", "Op1 <= Op2"
   .Add "Equal", "Op1 = Op2"
  End With

  Call MatchCode()

  IF ErrorMessage <> "" Then DisplayError
 End Sub

 Private Sub MatchCode()
  Dim bI, bG, bM
  Dim Str

  Select Case GetMethod
   Case "FSO" :
    Dim FSO : Set FSO = Server.CreateObject("Scripting.FileSystemObject")
    Set TS = FSO.OpenTextFile(FilePath, 1, false)
    Str = TS.ReadAll()
    TS.Close
    Set TS = Nothing
    Set FSO = Nothing
   Case "XMLHTTP" :
    Dim XHttp : Set XHttp = Server.CreateObject("MSXML2.XMLHTTP")
    With XHttp
     Call .Open("Get", "http://"&Request.ServerVariables("Server_Name")&Request.ServerVariables("Script_Name"), False)
     Call .Send()
     Str =B2S(.responseBody)
    End With
    Set XHttp = Nothing
  End Select
  Dim itemString
  With Re
   bI = .IgnoreCase
   bG = .Global
   bM = .MultiLine
   .IgnoreCase = True
   .Global = True
   .Pattern = "[\s\S]*

]+>([\s\S]+)<\/form>[\s\S]*"
   Str = .Replace(Str, "$1")

   .Global = True
   .MultiLine = True
   .Pattern = "<\/?(?!input|textarea|select)[^>]*>"
   Str = .Replace(Str, "")

   .Pattern = "^.*(<(?=input|textarea|select)[^>]*>).*$"
   Str = .Replace(Str, "$1")

   .Pattern = "([\r\n]+|^\s*)(?=<)"
   Str = .Replace(Str, "")
   While Test("dataType=([""\'])([^""\'>]+)\1", Str)
    .MultiLine = False
    .Pattern = "^([^\n]+)\n([\s\S]*)$"
    itemString = .Replace(Str, "$1")
    Str = .Replace(Str, "$2")
    .Pattern = "(name|dataType|to1|min|max|msg|require|regexp|format)=([""\'])([^""\'>]+)\2"

    Dim Matches : Set Matches = .Execute(itemString)
    Dim Match, RetStr : RetStr = ""
       For Each Match in Matches
       RetStr = RetStr & Match.Value & " : "
       Next
    Call IsValid(Replace(Replace(Replace(RetStr, " : $", ""), "to=", "toObj="), """Require""", """NotEmpty"""))
   Wend
   .IgnoreCase = bI
   .Global = bG
   .MultiLine = bM

  End With
 End Sub

 Private Sub IsValid(ByVal Str)
  Dim name, msg, dataType, toObj, min, max, require, regexp, format
  min = 1 : max = 100 : require = "true" : format = "YMD"
  Execute Str
  Dim PostValue : PostValue = Request(name)
  Dim Fun
  
  IF require = "false" AND PostValue = "" Then Exit Sub

  IF Dic.Exists(dataType) Then 
   Fun = Dic.Item(dataType)
  Else Fun = "Is" & dataType &"( PostValue )"
  End IF

  IF Not Eval(Fun) Then Call AddError(name,msg)
 End Sub

 Private Sub DisplayError()
  ErrorItem = Replace(ErrorItem, "^(" & Separator & ")", "")
  ErrorMessage = Replace(ErrorMessage, "^(" & Separator & ")", "")
  Select Case ErrorMode
   Case 4
    ErrorMessage = Join(Split(ErrorMessage, Separator), "

  • ")
        Response.Clear
        Response.Write "
    输入有错误:
    • " & Replace(ErrorMessage, "\b\d+:", "") & "
    "
        Response.Write "
    返回重填
    "
        Response.End
       Case Else
        Response.Write("")
      End Select
     End Sub

     Public Function IsEmail(ByVal Str)
      IsEmail = Test("^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$", Str)
     End Function

     Public Function IsUrl(ByVal Str)
      IsUrl = Test("^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>""])*$", Str)
     End Function

     Public Function IsNum(ByVal Str)
      IsNum= Test("^\d+$", Str)
     End Function

     Public Function IsQQ(ByVal Str)
      IsQQ = Test("^[1-9]\d{4,8}$", Str)
     End Function

     Public Function IsZip(ByVal Str)
      IsZip = Test("^[1-9]\d{5}$", Str)
     End Function

     Public Function IsIdCard(ByVal Str)
      IsIdCard = Test("^\d{15}(\d{2}[A-Za-z0-9])?$", Str)
     End Function

     Public Function IsChinese(ByVal Str)
      IsChinese = Test("^[\u0391-\uFFE5]+$", Str)
     End Function

     Public Function IsEnglish(ByVal Str)
      IsEnglish = Test("^[A-Za-z]+$", Str)
     End Function

     Public Function IsMobile(ByVal Str)
      IsMobile = Test("^((\(\d{3}\))|(\d{3}\-))?13\d{9}$", Str)
     End Function

     Public Function IsPhone(ByVal Str)
      IsPhone = Test("^((\(\d{3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}$", Str)
     End Function

     Public Function IsSafe(ByVal Str)
      IsSafe = (Test("^(([A-Z]*|[a-z]*|\d*|[-_\~!@#\$%\^&\*\.\(\)\[\]\{\}<>\?\\\/\'\""]*)|.{0,5})$|\s", Str) = False)
     End Function

     Public Function IsNotEmpty(ByVal Str)
      IsNotEmpty = LenB(Str) > 0
     End Function

     Public Function IsDateFormat(ByVal Str, ByVal Format)
      IF Not IsDate(Str) Then
       IsDateFormat = False
       Exit Function
      End IF

      IF Format = "YMD" Then
       IsDateFormat = Test("^((\d{4})|(\d{2}))([-./])(\d{1,2})\4(\d{1,2})$", Str)
      Else
       IsDateFormat = Test("^(\d{1,2})([-./])(\d{1,2})\\2((\d{4})|(\d{2}))$", Str)
      End IF
     End Function

     Public Function IsEqual(ByVal Src, ByVal Tar)
      IsEqual = (Src = Tar)
     End Function

     Public Function Compare(ByVal Op1, ByVal Operator, ByVal Op2)
      Compare = False
      IF Dic.Exists(Operator) Then
       Compare = Eval(Dic.Item(Operator))
       Elseif IsNotEmpty(Op1) Then
        Compare = Eval(Op1 &  Operator & Op2 )
      End IF
     End Function

     Public Function Range(ByVal Src, ByVal Min, ByVal Max)
      Min = CInt(Min) : Max = CInt(Max)
      Range = (Min < Src And Src < Max)
     End Function

     Public Function Group(ByVal Src, ByVal Min, ByVal Max)
      Min = CInt(Min) : Max = CInt(Max)
      Dim Num : Num = UBound(Split(Src, ",")) + 1
      Group = Range(Num, Min - 1, Max + 1)
     End Function

     Public Function Custom(ByVal Str, ByVal Reg)
      Custom = Test(Reg, Str)
     End Function

     Public Function Limit(ByVal Str, ByVal Min, ByVal Max)
      Min = CInt(Min) : Max = CInt(Max)
      Dim L : L = Len(Str)
      Limit = (Min <= L And L <= Max)
     End Function

     Public Function LimitB(ByVal Str, ByVal Min, ByVal Max)
      Min = CInt(Min) : Max = CInt(Max)
      Dim L : L =bLen(Str)
      LimitB = (Min <= L And L <= Max)
     End Function

     Private Function Test(ByVal Pattern, ByVal Str)
      Re.Pattern = Pattern
      Test = Re.Test(Str)
     End Function

     Public Function bLen(ByVal Str)
      bLen = Len(Replace(Str, "[^\x00-\xFF]", ".."))
     End Function

     Private Function Replace(ByVal Str, ByVal Pattern, ByVal ReStr)
      Re.Pattern = Pattern
      Replace =  Re.Replace(Str, ReStr)
     End Function

     Private Function B2S(ByVal iStr)
      Dim reVal : reVal= ""
      Dim i, Code, nCode
      For i = 1 to LenB(iStr)
       Code = AscB(MidB(iStr, i, 1))
       IF Code < &h80 Then
        reVal = reVal & Chr(Code)
       Else
        nCode = AscB(MidB(iStr, i+1, 1))
        reVal = reVal & Chr(CLng(Code) * &h100 + CInt(nCode))
        i = i + 1
       End IF
      Next
      B2S = reVal
     End Function

     Private Sub AddError(ByVal Name, ByVal Message)
      ErrorItem = ErrorItem & Separator & Name
      ErrorMessage = ErrorMessage & Separator & ErrorNo & ":" & Message
      ErrorNo = ErrorNo + 1
     End Sub

     Public Function IsValidPost()
      Dim Url1 : Url1 = Cstr(Request.ServerVariables("HTTP_REFERER"))
      Dim Url2 : Url2 = Cstr(Request.ServerVariables("SERVER_NAME"))
      IsValidPost = (Mid(Url1, 8, Len(Url2)) = Url2)
     End Function

     Public Property Let Mode(ByVal Val)
      ErrorMode = CInt(Val)
     End Property

     Public Property Let Form(ByVal Val)
      IF IsNumeric(Val) Then
       FormIndex = Val
      Else
       FormName = Val
      End IF
     End Property

     Public Property Let Path(ByVal Val)
      IF Test("^[A-Za-z]:\\\w+$", Val) Then
       FilePath = Val
      Else
       FilePath = Server.MapPath(Val)
      End IF
     End Property

     Public Property Let Method(ByVal Val)
      GetMethod = Val
     End Property
    End Class
    %>
     表单验证类 Validator v1.0
     
     
     
     
     


       
      
     
     
      
     
       
      
     
     
      
     
     
      
     
     
      
     
       
      
     
     
      
     
       
      
     
     
      
     
      
      
     
      
      
     
      
      
     
        
      
     
      
      
     
     
      
     
     
      
     
     
      
     
     
      
     
     
      
     
     
        
     
     
      
     
     
    真实姓名:
    英文名:
    主页:
    密码:
    重复:
    信箱:
    信箱:
    QQ:
    身份证:
    年龄:
    年龄1:
    电话:
    手机:
    生日:
    邮政编码:
    邮政编码:
    操作系统:
    所在省份:广东陕西浙江江西
    爱好:运动上网听音乐看书
    自我介绍:
    自传:


  • <%
     Dim V : Set V = New Validator
     V.Mode = 3
     V.Method = "XMLHTTP"
     V.Validate()
     Set V = Nothing
    %>

     

    你可能感兴趣的:(QQ,Mobile,Windows,Mobile,Windows,Phone,音乐)