经典的ASP IsNumeric奇怪吗?

时间:2012-07-17 14:57:32

标签: asp-classic isnumeric

在IsNumeric函数中出现了一个相当奇怪的功能,它是经典的ASP。

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

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

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

另外,我该如何解决这个问题呢?正则表达式会更好吗?

谢谢!

2 个答案:

答案 0 :(得分: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

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

答案 1 :(得分: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

给出错误