3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援→開発戻り浦島太郎状態の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。

(VB.Net)文字列が数値かどうか判定する方法 [TryParse]

入力系で、TextBox に入力された値を数値として扱いたい場合に、入力チェックロジックにて数値かどうかを判定する必要があります。

VB6以前では IsNumeric 関数というものがありましたが、これがなかなか癖のある仕様でした。

たとえば

IsNumeric("1e9")

と書くと True が返るのです。

これは e を指数表記ととらえ、1×10の9乗と解釈するからだそうです。

この IsNumeric 関数もVB.Netに移植されていました。

でもやはり指数表記は True と判断するようです。

さらにこの IsNumeric 関数はおせっかいなVBらしく、\(円記号),16進数表記といったところまでも True としてしまいます。

単純に数値なのかどうかにははやり使えそうにありません。

ということで、.Net Framework標準での数値判定に使えそうなメソッドを探してみました。

見つけたのは

TryParse

というメソッドです。

これは 型クラスの静的メソッドして用意されており、

型.TryParse(評価する文字列,変換後の値)

という形で使えます。

戻り値には変換できたか、できなかったかが Boolean で帰ります。

変換にも使えるし、変換できるかの判定にも使えるみたいです。

動きとしては引数で渡した文字列が、その型に変換できるかどうかを判断してるようです。

IsNumeric 関数のようにおせっかいなこともしません。

型も Integer,Doubleをはじめ、かなり用意されていました。

ということで、これは入力チェックロジックでは有用だとおもいます。

参考:

【VB.NET】指定した文字が数字かどうか判定する(IsDigit, IsNumber, IsNumeric)

文字列が数値かどうか判定する TryParse

TryParseをつかいこなそう

IsNumericのいろいろ

VisualBasic6.0 SP5 のおもしろバグ発見!? 数値の指数はどうやらFormat関数でも来てしまうみたいです。厄介ですね。