在IsNumeric函数中出现了一个相当奇怪的功能,它是经典的ASP。
我有一个JSONArray类,它将其内容打印到一个字符串 - 它使用IsNumeric
来确定是否使用"
来转义值。一切都工作正常,直到今天客户报告了一个以前看不见的错误!
经过一番挖掘后,我发现从AJAX调用返回的JSON数组中的少数记录形成不佳。更多的挖掘。结果类似于'2D25'
格式化的字符串将被IsNumeric
评估为数字,因此不会被转义!
有谁知道这是为什么? ASP是否认为D
可与.
互换?
另外,我该如何解决这个问题呢?正则表达式会更好吗?
谢谢!
答案 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
给出错误