2012-07-17 96 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