将字符串验证为正整数

时间:2015-10-06 06:56:23

标签: validation vbscript

我试图解决一个相当普遍的问题 - 验证输入是一个更大的正整数1.只要输入不是科学记数法,我到目前为止所做的工作。

我在SO上搜索了很长时间以寻求解决方案,但是没有找到任何针对此特定案例的内容。所以这是我目前的代码:

If IsNumeric(objArgs(1)) Then

  If CLng(objArgs(1)) = objArgs(1) Then
    if(objArgs(1) < 1) then
      wscript.echo "2nd parameter must be greater than 1"
    else
      ' move on
    end if
  else
    wscript.echo "2nd parameter is not an integer"
  end if
  else
    wscript.echo "2nd parameter is not numeric"      
end if

当输入类似于a0-103.14等等时,此功能正常。

当我输入科学记数法中的(大)数字时出现问题,例如1E+48。如果我输入此内容,我会在CLng() - 函数上出现溢出错误。

我该如何避免这种情况?

2 个答案:

答案 0 :(得分:1)

  

将输入验证为大于1的正整数

像这样的验证任务是正则表达式的域。

Function IsPositiveInteger(input)
  Dim re : Set re = New RegExp

  re.pattern = "^\s*0*[1-9]\d*\s*$"
  IsPositiveInteger = re.test(input)
End Function

用法:

MsgBox IsPositiveInteger("asdf")   ' False
MsgBox IsPositiveInteger("0000")   ' False
MsgBox IsPositiveInteger("0001")   ' True
MsgBox IsPositiveInteger("9999")   ' True

Expession

^       # start of string
\s*     # allow any number of leading spaces
0*      # allow any number of leading zeros
[1-9]   # require one digit between 1 and 9
\d*     # allow any number of following digits
\s*     # allow any number of trailing spaces
$       # end of string

这将识别任何符合正整数的字符串。它不允许您查看字符串表示的整数是否适合VBScript的一种数字数据类型。

如果您的脚本需要进行此类转换,则必须自行应用范围检查。这可以通过词典字符串比较轻松完成。

要获得更严格的结果,请删除允许前导/尾随空格的表达式部分。

答案 1 :(得分:0)

CLng将转换为long,最大值为2 ^ 31-1。 如果你想测试真正的大数和/或分数, 使用CDbl(转换成双打)。

或者你真的想引用非标准的真正大但仍然整数的类吗? (即整数> 2 ^ 31-1)。