验证为窗体和查询字符串在ASP经典使用正则表达式。 几乎工作,但缺少的东西?(Validatio

2019-09-21 03:23发布

我试图通过使用如下所示的功能/代码添加在传统的ASP一些输入验证。 这看起来像它的正常工作的只有一个“文本”类型。 其他的我不断收到错误,或者它只是不正确过滤。 我想了解我在做什么错了,请帮助我。

有效数据类型:“电子邮件”,“整数”,“日期”,“串”和“文本”。 前三个是显而易见的,近两年有细微的差别。

电子邮件 ”应只允许数字和leters,和以下字符“@”,“ - ”,“_”“”

日期 ”应通过运行则IsDate验证,如果真那么如果允许虚假不。

字符串 ”应该验证基于文本的查询字符串,只允许字母,数字,_, -和。

而“ 文本 ”是任意格式的文本表单字段类型的内容。

该“ 整数 ”应该只允许数字和一个句号(。)

用法示例: <input type="text" value="<%=MakeSafe("test@test.com</HTML>1234.5",integer,50)%>">

例如: MakeSafe(dataInput,dataType,dataLength)

<%
'// CODE BY: dB Masters
'// FOUND AT: http://successontheweb.blogspot.com/2008/03/input-validation-for-security-in.html

Function MakeSafeConvert(encodeData)
encodeData = replace(encodeData,"&", "&#38;")
encodeData = replace(encodeData,"'", "&#39;")
encodeData = replace(encodeData,"""", "&quot;")
encodeData = replace(encodeData,">", "&gt;")
encodeData = replace(encodeData,"<", "&lt;")
encodeData = replace(encodeData,")", "&#41;")
encodeData = replace(encodeData,"(", "&#40;")
encodeData = replace(encodeData,"]", "&#93;")
encodeData = replace(encodeData,"[", "&#91;")
encodeData = replace(encodeData,"}", "&#125;")
encodeData = replace(encodeData,"{", "&#123;")
encodeData = replace(encodeData,"--", "&#45;&#45;")
encodeData = replace(encodeData,"=", "&#61;")
MakeSafeConvert = encodeData
End Function

Function MakeSafe(dataInput,dataType,dataLength)

Dim regex, validInput, expressionmatch
regex = ""
validInput = "1"

If dataType = "string" And Len(dataInput) > 0 Then
    regex = "^[\w-\.]{1,"& dataLength &"}$"
ElseIf dataType = "email" And Len(dataInput) > 0 Then
    regex = "^[\w-\.]+@([\w-]+\.)+[\w-]{2,6}$"
ElseIf dataType = "integer" And Len(dataInput) > 0 Then
    regex = "^\d{1,"& dataLength &"}$"
ElseIf dataType = "date" And Len(dataInput) > 0 Then
If Not IsDate(dataInput) Then validInput = "0" End If
ElseIf dataType = "text" And Len(dataInput) > 0 Then
If Len(dataInput) > dataLength Then validInput = "0" End If
End If

If Len(regex) > 0 And Len(dataInput) > 0 Then
    Set RegExpObj = New RegExp
    RegExpObj.Pattern = regex
    RegExpObj.IgnoreCase = True
    RegExpObj.Global = True
    RegExpChk = RegExpObj.Test(dataInput)

If Not RegExpChk Then
    validInput = "0"
    End If
    Set RegExpObj = nothing
End If

If validInput = "1" And Len(dataInput) > 0 Then
    MakeSafe = MakeSafeConvert(dataInput)
    ElseIf Len(dataInput) = 0 Then
    MakeSafe = ""
Else
    Response.Write "<h2>Processing Halted.</h2>"
    Response.End
End If

End Function
%>

示例代码和ERROR(S):

当我测试这使用的代码:

<%= MakeSafe( “test@test.com1234.5”,电子邮件,50)%> *不验证任何。*


我没有得到一个错误消息,但它不验证什么。

**输出为:test@test.com1/27/20121234.5

应该只有:test@test.com**

当我测试这使用的代码:

<%= MakeSafe( “test@test.com1/27/20121234.5”,日期,50)%>

我没有得到一个错误消息,但它不验证什么。

输出是:test@test.com1/27/20121234.5应该只有:2012年1月27日

另外两个给我这个错误信息:

<%= MakeSafe( “test@test.com1234.5”,串,50)%>
*错误!!! 错误数量的参数或无效的属性赋值:“串”

<%= MakeSafe( “test@test.com1234.5”,整数,50)%>

*错误!!! 语法错误

非常感谢你为你提供任何帮助...

Answer 1:

如果它不是一个错字那么你的错是在函数调用的第二个参数。

你打电话的功能等:

<%=MakeSafe("test@test.com1234.5",email,50)%>

这是错误的,因为你应该“......”第二个参数了。 这应该工作:

<%=MakeSafe("test@test.com1234.5","email",50)%>


文章来源: Validation for Form and QueryString in ASP Classic using Regex. Almost working but missing something?