vb,netでアルファベットと数字の判別

タグの編集
投稿者 年寄プログラマー  (社会人) 投稿日時 2020/10/7 20:18:58
vb,net 2013で アルファベットと 数字の判別をしたいのですが
上手くいきません。
どなたか、ご教授をお願いします

        Dim www As String
        www = "12"
        If Char.IsNumber(www, 2) Then
            MessageBox.Show("数字です")
        Else
            MessageBox.Show("違う")
        End If


'指定された引数は、有効な値の範囲内にありません。 になります
import しなければなりませんか?
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2020/10/7 20:32:28
「数値」に変換することが目的ですか?
「数字」かどうかを確認することが目的ですか?

前者なら、Decimal.TryParse や Integer.TryParse メソッドが便利です。
後者なら、Regex クラスを使うか、あるいは VB の Like 演算子で判定できそうです。
投稿者 年寄プログラマ  (社会人) 投稿日時 2020/10/7 21:48:09
英数字を区別したいのです
英文字なら処理A
数字なら処理Bを実行したいのです

投稿者 魔界の仮面弁士  (社会人) 投稿日時 2020/10/8 00:58:50
先に紹介した Like 演算子を使えば要件を満たせそうな気もしますが、いかがでしたか?
https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/like-operator?WT.mc_id=DT-MVP-8907

'テキストの内容が 2 桁の数字なら、背景色が水色になる。 
Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
    If TextBox1.Text Like "##" Then
        TextBox1.BackColor = Color.Cyan
    Else
        TextBox1.ResetBackColor()
    End If
End Sub


この場合、2桁の数字…たとえば「12」や「12」と書かれたときに水色でお知らせします。

2 桁の数字ではない場合…たとえば「123」や「1」や「XYZ」などだと元の色に戻ります。

2桁の数字と言っても、「¹²」「₁₂」「⒈⒉」「①②」「➊➋」「❶❷」などは、水色になりません。


また、「Like "##"」のかわりに「Like "[0-9][0-9]"」とすれば、
半角 "12" は有効で、全角 "12" を無効にすることもできます。

同様にして、半角小文字 a~z は許容するが、半角大文字 A~Z は拒絶したいとか、
全角半角大文字小文字問わずアルファベット 2 文字であるかを調べたりすることもできます。


もしも Like 演算子だけでは判定しきれない、より細かい調査が必要な要件では、
『正規表現』というものを利用することもできます。VB から正規表現を扱うためには、
先に紹介した Regex クラスを使うことになります。興味があれば調べてみてください。


> 英数字を区別したいのです

どういう用途に使う物なのか、目的が分からないので細かく聞いてしまいますが、
今回の判定を行うにあたり、使われる文字種の範囲と文字数は明確になっていますか?

大文字・小文字・全角・半角・ウムラウトなどをどう考えるのか。
最初に想定された文字種以外が混入した場合はどうするのかなど。


条件あるいは目的が明確にならないと、コードを示しづらいです。
仕様が明確になっていれば、そのものズバリな判定処理を提供できるかもしれません。


> 英文字なら処理A
> 数字なら処理Bを実行したいのです

最低でも考えておくべき点として、処理Aでも処理Bでもないパターンの文字列が
渡されてきたときに、プログラムとしてはどのように扱われるべきであるのかを
定めておく必要があります。

たとえば 
Dim text As String = "5G"
という文字列があったとしましょう。
これは「英文字だけ」の文字列では無いですし、「数字だけ」の文字列でもありませんよね。
この場合、AとBどちらの処理が行われるのでしょうか。
下記の振る舞いの中に該当するものはありますか?

🔹 処理A に分類したい。(アルファベット "G" を含んでいるから)
🔹 処理B に分類したい。(数字 "5" を含んでいるから)
🔸 処理C という、また別の分類に割り当てたい。(数字のみでもアルファベットのみでもない)
⚠ そもそもそんなデータは来ない。来たら異常データということで、例外を Throw して良い。


仮に「アルファベット 2 文字」だとしても、穿った書き方をすれば、こんな文字列もありえるわけで…。
'左から、Bold(serif) / Bold(sans) / Italic(serif) / Italic(sans) / Bold-Italic(serif) / Bold-Italic(sans) / Narrow / FullWidth 
Dim samples() As String = {"𝐕𝐁""𝗩𝗕""𝑉𝐵""𝘝𝘉""𝑽𝑩""𝙑𝘽""VB""VB"}