51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 6640|回复: 13
打印 上一主题 下一主题

[原创] vb函数调用问题

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2006-4-10 15:03:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在脚本中写入这句:ExecuteFile "D:\Program Files\Mercury Interactive\QuickTest Professional\Tests\vb_fun\isnotValid.vbs"
之后是不是就可直接调用isnotValid.vbs中的函数,若是,调试出错,如下图,请问可能是哪里出错了呢

[ 本帖最后由 minliu 于 2006-4-10 15:19 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2006-4-10 16:06:45 | 只看该作者
仔细看看你的vbs的语法吧。不是说了缺少“)”
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2006-4-10 16:27:11 | 只看该作者
谢谢,我的代码如下,是判断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 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2006-4-11 09:45:51 | 只看该作者
脚本有错,你贴到QTP里面,然后按一下专家视图的标签就能看见了~~
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2006-4-11 16:40:09 | 只看该作者
单步调试一下吧,应该是脚本的错误
回复 支持 反对

使用道具 举报

该用户从未签到

6#
 楼主| 发表于 2006-4-12 16:43:57 | 只看该作者
谢谢
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2016-2-27 08:48
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    7#
    发表于 2006-4-12 20:42:15 | 只看该作者
    把 第一行 改为   Public Function  IsValidEmail(strEmail )   试试看。我建议你找一本正规的讲解 VBScript的 书看,特别是仔细看 Function  过程的书写方式。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-2-27 08:48
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    8#
    发表于 2006-4-12 20:45:06 | 只看该作者
    另外 name 好像是QTP的 Key Words 呀,因此我建议你把name 换成别的变量
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-2-27 08:48
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    9#
    发表于 2006-4-12 21:04:13 | 只看该作者
    楼主,把第一行改为 Public Function  IsValidEmail(strEmail )  后,我已经在QTP里面把此函数调试通过了,但不没有写代码去调用此函数来进一步验证此函数是否还有问题。 我想 你应该能行的。 看到此帖后 把你的反馈情况告诉我一下,不管是 调试通过了还是没有通过。  谢谢!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10#
     楼主| 发表于 2006-4-12 22:38:31 | 只看该作者
    原帖由 walker1020 于 2006-4-12 21:04 发表
    楼主,把第一行改为 Public Function  IsValidEmail(strEmail )  后,我已经在QTP里面把此函数调试通过了,但不没有写代码去调用此函数来进一步验证此函数是否还有问题。 我想 你应该能行的。 看到此帖后 把你的反 ...

    谢谢,不在提示这个错误了;等调式过了在在反馈给你。太感谢 各位了。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    11#
    发表于 2006-4-13 11:31:06 | 只看该作者
    楼主的意思是想检查地址的有效吗,你的脚本写的太复杂,排错以及以后维护的时候不方便。楼主写完整你要执行的功能,我们可以一起写写脚本。下面是将地址分为分部分并显示出来(在楼主代码的基础上修改的)。
    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)) '//  将邮址以@为标记分成两部分
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    12#
     楼主| 发表于 2006-4-13 16:34:08 | 只看该作者
    首先谢谢你们的帮忙,
    我主要想对给出的一个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 编辑 ]
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13#
    发表于 2006-4-13 17:21:17 | 只看该作者
    “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循环会执行两次。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    14#
     楼主| 发表于 2006-4-13 21:43:38 | 只看该作者
    哦,明白了,谢谢!!
    那上边的程序已经实现了email的有效性的判断了,仅像你们上边说的 改成Public Function  IsValidEmail(strEmail )  这样就可以了。
    另外,这个可以通过正则表达式实现吗,怎么实现呢。谢谢
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-5-14 11:47 , Processed in 0.081690 second(s), 28 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表