【问题标题】:Classic ASP IsNumeric weirdness?经典的 ASP IsNumeric 怪异?
【发布时间】:2012-07-16 12:58:04
【问题描述】:

在经典的 ASP 中使用 IsNumeric 中的烘焙函数遇到了一个相当奇怪的功能。

我有一个 JSONArray 类,可以将其内容打印到字符串中 - 它使用 IsNumeric 来确定是否使用 " 转义值。一切正常,直到今天客户报告了一个以前看不见的错误!

经过一番挖掘,我发现从 AJAX 调用返回的 JSON 数组中的少数记录格式不正确。更多挖掘。原来格式类似于'2D25' 的字符串将被IsNumeric 评估为数字,因此不会被转义!

有人知道这是为什么吗? ASP 是否认为D 可以与. 互换?

另外,我应该如何解决这个问题?正则表达式会是更好的解决方案吗?

谢谢!

【问题讨论】:

    标签: asp-classic isnumeric


    【解决方案1】:

    2D25 是一个十六进制值。请参阅http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.information.isnumeric.aspx,特别是:“如果 Expression 是包含有效十六进制或八进制数字的字符串,IsNumeric 将返回 True。” RegEx 可能是您最好的选择。

    >>

    http://classicasp.aspfaq.com/general/what-is-wrong-with-isnumeric.html

    在经典 ASP 中,D 用于表示 double 精度。

    【讨论】:

    • 我认为它是这样的,但是您提供的文档适用于 .Net,不适用于经典 asp。
    • 啊——你是对的。经典 ASP 中的“D”曾经用于表示“双”精度。听起来这就是你所看到的。我将在答案中添加另一个经典 ASP 链接作为参考...您必须将页面向下滚动大约 1/2 到 VBScript 部分。
    【解决方案2】:

    RegEx 确实是要走的路,这里是这种解决方案的一个例子

    Function myIsNumeric(ByVal Value)
      Set regEx = New RegExp
      regEx.pattern = "^(0|[1-9][0-9]*)$"
      myIsNumeric = Regex.Test(Value)
    End Function
    

    这里是测试

    if myIsNumeric("2D25") then
      Wscript.Echo "true"
    else
      Wscript.Echo "false"
    end if
    

    给出错误

    【讨论】:

    • RegEx 是一个合理的解决方案,但是在问题中测试数组时,返回 RegExp 的函数会更好。数组上的循环只需针对RegExp 的同一实例重复调用.Test
    • 是的,但可读性也很重要,我的经验是,在某些地区的 vbscript 是如此蜗牛,以至于这些小差异无关紧要
    • 我认为我的建议不会对可读性造成太大损害,这取决于数组中有多少条目。我想知道实例化一个 RegExp 对象并解析一个表达式说 1000 次需要多长时间?
    • @AnthonyWJones,请发布您的版本,我们是来学习的,不是吗,我已经看到了您的一些答案,尽管我使用 vbscript 编程已有 10 年了(但即将到来)到最后,现在我爱上了 Ruby),如果我喜欢,我将对这两种方法进行基准测试
    猜你喜欢
    • 1970-01-01
    • 2014-06-09
    • 1970-01-01
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    相关资源
    最近更新 更多