51Testing软件测试论坛

标题: vb函数调用问题 [打印本页]

作者: minliu    时间: 2006-4-10 15:03
标题: vb函数调用问题
我在脚本中写入这句:ExecuteFile "D:\Program Files\Mercury Interactive\QuickTest Professional\Tests\vb_fun\isnotValid.vbs"
之后是不是就可直接调用isnotValid.vbs中的函数,若是,调试出错,如下图,请问可能是哪里出错了呢

[ 本帖最后由 minliu 于 2006-4-10 15:19 编辑 ]
作者: sz_lg    时间: 2006-4-10 16:06
仔细看看你的vbs的语法吧。不是说了缺少“)”
作者: minliu    时间: 2006-4-10 16:27
谢谢,我的代码如下,是判断EMAIL的有效性:

Public Function IsValidEmail(strEmail As String) As Boolean
  Dim names, name, i, c
  IsValidEmail = True
   
  names = Split(strEmail, "@")

  If( UBound(names) <> 1) Then
    IsValidEmail = False
    Exit Function
  End If

  For Each name In names

    If( Len(name) <= 0 )Then
      IsValidEmail = False
      Exit Function
    End If

    For i = 1 To Len(name)
      c = LCase(Mid(name, i, 1))

      If (InStr("abcdefghijklmnopqrstuvwxyz_-.", c) <= 0 And Not IsNumeric(c) )Then
        IsValidEmail = False
        Exit Function
      End If
    Next

    If( Left(name, 1) = "." Or Right(name, 1) = ".") Then
      IsValidEmail = False
      Exit Function
    End If

  Next

  If (InStr(names(1), ".") <= 0 )Then
    IsValidEmail = False
    Exit Function
  End If

  i = Len(names(1)) - InStrRev(names(1), ".")

  If (i <> 2 And i <> 3 )Then
    IsValidEmail = False
    Exit Function
  End If

  If (InStr(strEmail, "..") > 0 )Then
    IsValidEmail = False
    Exit Function
  End If

End Function
感觉没少括号啊,提示的是这个函数少吗?谢谢

[ 本帖最后由 minliu 于 2006-4-10 17:08 编辑 ]
作者: Horus_Ra    时间: 2006-4-11 09:45
脚本有错,你贴到QTP里面,然后按一下专家视图的标签就能看见了~~
作者: 柳叶    时间: 2006-4-11 16:40
单步调试一下吧,应该是脚本的错误
作者: minliu    时间: 2006-4-12 16:43
谢谢
作者: walker1020    时间: 2006-4-12 20:42
把 第一行 改为   Public Function  IsValidEmail(strEmail )   试试看。我建议你找一本正规的讲解 VBScript的 书看,特别是仔细看 Function  过程的书写方式。
作者: walker1020    时间: 2006-4-12 20:45
另外 name 好像是QTP的 Key Words 呀,因此我建议你把name 换成别的变量
作者: walker1020    时间: 2006-4-12 21:04
楼主,把第一行改为 Public Function  IsValidEmail(strEmail )  后,我已经在QTP里面把此函数调试通过了,但不没有写代码去调用此函数来进一步验证此函数是否还有问题。 我想 你应该能行的。 看到此帖后 把你的反馈情况告诉我一下,不管是 调试通过了还是没有通过。  谢谢!
作者: minliu    时间: 2006-4-12 22:38
原帖由 walker1020 于 2006-4-12 21:04 发表
楼主,把第一行改为 Public Function  IsValidEmail(strEmail )  后,我已经在QTP里面把此函数调试通过了,但不没有写代码去调用此函数来进一步验证此函数是否还有问题。 我想 你应该能行的。 看到此帖后 把你的反 ...

谢谢,不在提示这个错误了;等调式过了在在反馈给你。太感谢 各位了。
作者: BiSheng    时间: 2006-4-13 11:31
楼主的意思是想检查地址的有效吗,你的脚本写的太复杂,排错以及以后维护的时候不方便。楼主写完整你要执行的功能,我们可以一起写写脚本。下面是将地址分为分部分并显示出来(在楼主代码的基础上修改的)。
Dim names, name1, i, c   '//因为name不能定义,所以改为name1
  IsValidEmail = True
  strEmail = "51testing@51testing.com" '//
  names = Split(strEmail, "@")
             x = split(strEmail,"@")  
  For i = 0 to UBound(names)
          msgbox i  '//
          msgbox(names(i)) '//  将邮址以@为标记分成两部分
作者: minliu    时间: 2006-4-13 16:34
首先谢谢你们的帮忙,
我主要想对给出的一个email进行有效性判断:如给出eirio@eyou.com判断结果正确;给出jkdjiu%%判断结果为错。

我还是不清楚email 的有效格式应为什么,尤其@之后的*.*   *.*.*等等是依据什么判断的;(查了一下这么说: 需出现'@',且不在首字符.'@'后出现'.',且不紧跟其后.满足这些就可以了吗)

还有几个函数用法请教:|

split()返回的是一维数组,在上例中的names是否是51testing@51testing.com;UBound(names)返回的值是否是22(len("51testing@51testing.com")-1)
若像上边理解,msgbox(names(i)好象是打出每个元素,“将邮址以@为标记分成两部分
”又怎么理解,谢谢

[ 本帖最后由 minliu 于 2006-4-13 16:45 编辑 ]
作者: BiSheng    时间: 2006-4-13 17:21
“Dim names, name1, i, c   '//因为name不能定义,所以改为name1
  IsValidEmail = True
  strEmail = "51testing@51testing.com" '//
  names = Split(strEmail, "@")
             x = split(strEmail,"@")  
  For i = 0 to UBound(names)
          msgbox i  '//
          msgbox(names(i)) '//  将邮址以@为标记分成两部分


还有几个函数用法请教:|
split()返回的是一维数组,在上例中的names是否是51testing@51testing.com;UBound(names)返回的值是否是22(len("51testing@51testing.com")-1)
若像上边理解,msgbox(names(i)好象是打出每个元素,“将邮址以@为标记分成两部分 ”又怎么理解,谢谢”

///split将一个字符串分割成子字符串,然后将结果作为字符串数组传回;这里是以分号“@”作为分割字符串51testing@51testing.com的标记。即将51testing@51testing.com分为51testing和51testing.com两个部分。

//names:因为函数Split返回的字符串,所以此时的names相当于一个一维数组,所以names的值应该是51testing和51testing.com,而不是51testing@51testing.com

//UBound(names):这个函数的作用是返回names的维数(即最大的下标)。上面names被分为两部分,所以返回的应该是1而不是22,因为数组下标是从0开始的,所以上面的for循环会执行两次。
作者: minliu    时间: 2006-4-13 21:43
哦,明白了,谢谢!!
那上边的程序已经实现了email的有效性的判断了,仅像你们上边说的 改成Public Function  IsValidEmail(strEmail )  这样就可以了。
另外,这个可以通过正则表达式实现吗,怎么实现呢。谢谢




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