Asp classic 经典ASP是数字怪诞吗?
刚刚遇到了一个非常奇怪的功能,其中内置的IsNumeric函数是经典的ASP 我有一个JSONArray类,它将其内容打印成字符串-它使用Asp classic 经典ASP是数字怪诞吗?,asp-classic,isnumeric,Asp Classic,Isnumeric,刚刚遇到了一个非常奇怪的功能,其中内置的IsNumeric函数是经典的ASP 我有一个JSONArray类,它将其内容打印成字符串-它使用IsNumeric来确定是否使用“”转义值。直到今天,一切都正常工作,一个客户端报告了一个以前未看到的错误 经过一番挖掘,我发现AJAX调用返回的JSON数组中的一些记录格式不好。进一步挖掘,结果是格式类似于'2D25'的字符串将被IsNumeric计算为数值,因此不会被转义 有人知道为什么吗?ASP认为D可以与互换吗 还有,我应该如何解决这个问题?正则表达式
IsNumeric
来确定是否使用“
”转义值。直到今天,一切都正常工作,一个客户端报告了一个以前未看到的错误
经过一番挖掘,我发现AJAX调用返回的JSON数组中的一些记录格式不好。进一步挖掘,结果是格式类似于'2D25'
的字符串将被IsNumeric
计算为数值,因此不会被转义
有人知道为什么吗?ASP认为D
可以与
互换吗
还有,我应该如何解决这个问题?正则表达式是更好的解决方案吗
谢谢!
2D25
是十六进制值。请特别参阅:“如果表达式是包含有效十六进制或八进制数的字符串,则IsNumeric返回True。”正则表达式可能是您的最佳选择
>
在经典的ASP中,
D
用于表示double
精度。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
gives false我想是这样的,但是您提供的文档是针对.Net的,不适用于classic asp。啊--您是对的。classic asp中的“D”曾经用于表示“双精度”。听起来您看到的就是这个。我将为classic asp的答案添加另一个链接作为参考…您必须沿页面向下滚动大约1/2到VBScript部分。RegEx是一个合理的解决方案。但是,当在数组上进行测试(如问题所述)时,最好使用返回
RegExp
的函数。数组上的循环只需调用。针对RegExp
的同一实例重复测试。正确,但可读性也很重要,我的经验是,在某些领域,vbscript是一个蜗牛,这些微小的差异无关紧要。我不认为我的建议会对可读性造成太大的损害,这取决于数组中有多少个条目。我想知道实例化一个RegExp对象和解析一个表达式需要多长时间1000次?@AnthonyWJones,请发布你的版本,我们是来学习的,不是吗?我已经看到了你的一些答案,这些答案让我学到了很多东西,尽管我用vbscript编程已经10年了(但现在快结束了,我爱上了Ruby),如果我喜欢,我会对这两种方法进行基准测试