VB.NET文字が数値型に変換できるか確認するには


nana  2004-06-22 18:52:29  No: 84155  IP: [192.*.*.*]

ある文字が数値型に変換できるかどうか確認するにはどうしたら
いいのでしょうか??

数値型に変えられない場合は、メッセージを出力したいのですが、
うまくいきません。。

教えてください。
お願いします。

編集 削除
魔界の仮面弁士  2004-06-23 01:55:06  No: 84156  IP: [192.*.*.*]

> ある文字が数値型に変換できるかどうか確認するにはどうしたら
> いいのでしょうか??

システム要件によって、「数値」の許容範囲は異なると思います。

たとえば、全角半角の扱いをどうするのか、負数や小数はOKなのか、
極端に大きい数値などは許可されるのか、空文字列はNGなのか、
ローマ数字は許容するのか、16進数表記や8進数表記はOKなのかなど…。

それによって、コーディング方法も変わってくると思いますので、
まずは、そのあたりの仕様をきっちり決めておくのが先決かと。

で。

簡単なところでは、Microsoft.VisualBasic.Information.IsNumeric が使えます。
書式を細かく定義する必要がある場合は、正規表現でどうぞ。


Private Sub Changed(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
    Dim F(4) As Boolean

    F(0) = IsNumeric(TextBox1.Text)
    F(1) = (New System.Text.RegularExpressions.Regex("^\d+$")).IsMatch(TextBox1.Text)
    F(2) = (New System.Text.RegularExpressions.Regex("^\d+$")).IsMatch(TextBox1.Text)
    F(3) = TextBox1.TextLength > 0
    F(4) = TextBox1.TextLength > 0
    Dim Ch As Char
    For Each Ch In TextBox1.Text.ToCharArray()
        F(3) = F(3) And Char.IsDigit(Ch)
        F(4) = F(4) And Char.IsNumber(Ch)
    Next

    Label1.Text = String.Format("IsNumeric関数={0}", F(0))
    Label2.Text = String.Format("正規表現 \d+ ={0}", F(1))
    Label3.Text = String.Format("正規表現 \d* ={0}", F(2))
    Label4.Text = String.Format("Char.IsDigit ={0}", F(3))
    Label5.Text = String.Format("Char.IsNumber={0}", F(4))
End Sub

編集 削除