2

焼き付けられたIsNumeric関数がクラシックASPであるという、かなり奇妙な機能に遭遇しただけです。

内容を文字列に出力するJSONArrayクラスがありました。これは、値を'sIsNumericでエスケープするかどうかを決定するために使用されていました。"今日まで、クライアントが以前は見られなかったエラーを報告するまで、すべてが正常に機能していました。

少し掘り下げた後、AJAX呼び出しから返されたJSON配列内のいくつかのレコードが適切に形成されていないことがわかりました。もっと掘る。同様にフォーマットされた文字列は、'2D25'によって数値として評価されるIsNumericため、エスケープされないことがわかります。

なぜこれなのか誰か知っていますか?ASPは、Dと互換性があると思います.か?

また、これを修正するにはどうすればよいですか?正規表現はより良い解決策でしょうか?

ありがとう!

4

2 に答える 2

4

2D25は16進値です。http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.information.isnumeric.aspxを参照してください。特に、「Expressionが有効な16進数または8進数を含む文字列の場合、IsNumericはTrueを返します。」正規表現はおそらくあなたの最善の策です。

<<<編集::クラシックASPリファレンス>>>

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

クラシックASPでは、は精度Dを通知するために使用されます。double

于 2012-07-17T15:06:33.297 に答える
2

正規表現は確かに進むべき道です、ここではそのような解決策の例です

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

falseを与える

于 2012-07-17T16:33:35.433 に答える