2012-07-17 98 views
1

刚刚碰到了一个相当奇怪的功能与在IsNumeric功能烤是经典的ASP。经典ASP数字怪异?

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

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

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

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

谢谢!

回答

4

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

< < <编辑::经典ASP参考>>>

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

在传统的ASP,该D用于发信号double精度。

+0

我想这是这样的,但是您提供的文档是.Net,不适用于传统的asp。 – FlyingStreudel 2012-07-17 17:36:06

+0

啊 - 你说得对。传统ASP中的'D'曾经被用来表示'双精度'。这听起来就是你所看到的。我将为经典ASP添加另一个链接作为参考的答案...您必须向下滚动页面大约1/2的VBScript部分。 – 2012-07-17 20:07:52

2

正则表达式确实是要走的路,在这里如此sollution

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 

提供虚假

+0

RegEx是一个合理的解决方案,但是如果在问题中对数组进行测试时,返回“RegExp”的函数将更可取。数组上的循环只需要对'RegExp'的同一个实例重复调用'.Test'。 – AnthonyWJones 2012-07-17 20:38:59

+0

是真实的,但可读性也很重要,我的经验是,在某些地区的vbscript是这样一个蜗牛,这些小小的差异并不重要 – peter 2012-07-17 20:44:58

+0

我不认为我的建议会对可读性造成很大损害,它将取决于多少条目在数组中。我想知道需要多长时间才能实例化RegExp对象并解析表达式1000次? – AnthonyWJones 2012-07-17 21:03:02