用正则表达式来增强VBScript(ASP)类型判断

来源:互联网 发布:scada数据采集系统 编辑:程序博客网 时间:2024/06/02 17:14

 

Dim dicParamType
 
Set dicParamType = Server.CreateObject("Scripting.Dictionary")
 dicParamType.Add 
"Account","^[a-zA-Z]{1}([a-zA-Z0-9]|[._]){4,24}$"
 dicParamType.Add 
"Password","^[a-zA-Z]{1}([a-zA-Z0-9]|[._]){4,24}$"
 dicParamType.Add 
"Email","w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*"
 dicParamType.Add 
"Phone","^[+]{0,1}(d){1,3}[ ]?([-]?((d)|[ ]){1,12})+$"
 dicParamType.Add 
"Mobil","^[+]{0,1}(d){1,3}[ ]?([-]?((d)|[ ]){1,12})+$"
 dicParamType.Add 
"Postal","^[a-zA-Z0-9 ]{3,12}$"
 dicParamType.Add 
"IP","^[0-9.]{1,20}$"
 dicParamType.Add 
"Url","^[a-zA-z]+://(w+(-w+)*)(.(w+(-w+)*))*(?S*)?$"
 dicParamType.Add 
"RelUrl","^/*[^/:*?<>|]+/*$"
 dicParamType.Add 
"FileName","^[^/:*?<>|]+$"
 dicParamType.Add 
"FilePath","(^[A-Z]:/[^/:*?<>|]+.w{2,6})"
 dicParamType.Add 
"FolderName","^[^/:*?<>|]+$"
 dicParamType.Add 
"FolderPath","(^[A-Z]:/[^/:*?<>|]+/*$)|(/{2}[^/:*?<>|]+/*$)"
 dicParamType.Add 
"Natural","^d+$"
 dicParamType.Add 
"PstInteger","^[0-9]*[1-9][0-9]*$"
 dicParamType.Add 
"NgtInteger","^-[0-9]*[1-9][0-9]*$"
 dicParamType.Add 
"Integer","^-?d+$"
 dicParamType.Add 
"PstFloat","^(([0-9]+.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*.[0-9]+)|([0-9]*[1-9][0-9]*))$"
 dicParamType.Add 
"NgtFloat","^(-(([0-9]+.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*.[0-9]+)|([0-9]*[1-9][0-9]*)))$"
 dicParamType.Add 
"Float","^(-?d+)(.d+)?$"
 dicParamType.Add 
"IsChinese","^[一-龥]+$"
 dicParamType.Add 
"HasChinese","[一-龥]+"
 dicParamType.Add 
"IsDateTime","^((((1[6-9]|[2-9]d)d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]d|3[01]))|(((1[6-9]|[2-9]d)d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]d|30))|(((1[6-9]|[2-9]d)d{2})-0?2-(0?[1-9]|1d|2[0-8]))|(((1[6-9]|[2-9]d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-)) (20|21|22|23|[0-1]?d):[0-5]?d:[0-5]?d$"
 dicParamType.Add 
"IsDate","^((((1[6-9]|[2-9]d)d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]d|3[01]))|(((1[6-9]|[2-9]d)d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]d|30))|(((1[6-9]|[2-9]d)d{2})-0?2-(0?[1-9]|1d|2[0-8]))|(((1[6-9]|[2-9]d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-))$"
 dicParamType.Add 
"IsTime","^(20|21|22|23|[0-1]?d):[0-5]?d:[0-5]?d$"

 
Function IsType(vnt,vntType)
  IsType 
= False
  
If Typename(vntType)="Integer" Then
   
If vntType < dicParamType.Count And vntType>=0 Then IsType=regTest(vnt,dicParamType.items()(vntType))
  
Else
   
If dicParamType.Exists(vntType) Then IsType=regTest(vnt,dicParamType(vntType))
  
End If
 
End Function
 
Function IsObjType(obj,strType) 
  IsObjType 
= False
  
If IsObject(obj) Then
   
If strType="object" Then
    IsObjType 
= True
   
ElseIf TypeName(obj)=strType Then
    IsObjType 
= True
   
End If
  
End If
 
End Function
 
Function regTest(ByVal strTest,ByVal strPattern)
   
Dim objReg
  
Set objReg = New RegExp
  
If IsEmpty(strPattern) Or IsNull(strPattern) Or IsEmpty(strTest) Or IsNull(strTest) Then 
   regTest
=False
   
Exit Function
  
End If
  objReg.Pattern
=strPattern
   objReg.IgnoreCase 
= True 
  objReg.Global 
= True 
   regTest 
= objReg.Test(strTest)
  
Set objReg = Nothing
   
End Function 

通过这个函数可以增强VBscript的“类型”判断能力,当然其间的正则表达式可以应用在任何其他语言中。