51Testing软件测试论坛

标题: 如何使用正则表达式验证日期是否有效 [打印本页]

作者: zhangchaoy    时间: 2011-12-15 13:26
标题: 如何使用正则表达式验证日期是否有效
With Window("Flight Reservation")
.ActiveX("Attached Text:=Date of Flight:", "Index:=0").Type DataTable ("Date_of_Flight", "Action1")

iDate = .ActiveX("Attached Text:=Date of Flight:", "index:=0").GetROProperty("Text")
Msgbox iDate
If iDate < >"[0-9][0-9]/[0-9][0-9]/[0-9][0-9]" Then
        Msgbox "日期格式不正确"
End If
End With

比如输入的日期不是数字,我要判断一下输入日期是否为数字的话,
If iDate < >"[0-9][0-9]/[0-9][0-9]/[0-9][0-9]" Then,这一句里应该怎么写呀。是用正则表达式吗,还是使用别的什么函数。谢谢
作者: hsjzfling    时间: 2011-12-15 14:27
所有问题都可以在帮助文档中找到答案,建议通读2遍QTP自带的help
Function RegExpTest(patrn, strng)
   Dim regEx, Match, Matches   ' Create variable.
   Set regEx = New RegExp   ' Create regular expression.
   regEx.Pattern = patrn   ' Set pattern.
   regEx.IgnoreCase = True   ' Set case insensitivity.
   regEx.Global = True   ' Set global applicability.
   Set Matches = regEx.Execute(strng)   ' Execute search.
   For Each Match in Matches   ' Iterate Matches collection.
      RetStr = RetStr & "Match found at position "
      RetStr = RetStr & Match.FirstIndex & ". Match Value is '"
      RetStr = RetStr & Match.Value & "'." & vbCRLF
   Next
   RegExpTest = RetStr
End Function
MsgBox(RegExpTest("is.", "IS1 is2 IS3 is4"))
这是帮助中提供的代码,稍微修改下就能符合你的要求了

PS:你的那段正则也不能精确匹配合法日期。。。
作者: zhangchaoy    时间: 2011-12-15 15:49
谢谢呀,我再研究一下
作者: wangyanzhao    时间: 2011-12-18 21:11
If iDate < >"[1-12]{1}[1-31]{1}[2011-2296]{1}" Then
          Msgbox "日期格式不正确"
End If
作者: zylbsplx2008    时间: 2011-12-19 15:45
这个正则日期格式不一定是这样的,这样判断日期会出问题……
作者: Lemon_s    时间: 2011-12-20 14:37
回复 1# zhangchaoy

Function RegExpfind(p,s)
   Dim regEx
   Set regEx=new RegExp
   regEx.Pattern=p
   regEx.IgnoreCase=True
   regEx.Global=True
   regExpfind=regEx.Test(s)
End Function

If (RegExpfind("^(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|1[0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579[26]))|((0[48]|[2468][048]|[13579][26])00)-02-29)$",iDate)) Then
        msgbox "日期格式正确"
        else
        msgbox "日期格式不正确"
End If




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2