投稿者 魔界の仮面弁士  (社会人) 投稿日時 2022/5/24 12:47:42
たとえば半角で入力してから、あとから「再変換」で部分的に全角化することもできますよね。

辞書登録機能や再変換機能を多用するユーザーのことを鑑みると、
入力時点での制限は、あまりやり過ぎない方が良い場合もあります。

(入力中はあまり強く制限せず、入力後のバリデーション時に
 整形したり警告したりする実装もしばしば見かけます)


> 全角文字のみ半角カナのみ
正規表現を使うか、Like 演算子を使うか、Char 型の範囲指定とか…ですかね。

If Not TextBox1.Text Like "*[!ヲ-゚]*" Then
    Label1.Text = "半角カナのみ(または未入力)"
Else
    Label1.Text = "半角カナ以外が含まれている"  '半角の「1」や「a」、半角ハングルなども混入NG 
End If

Dim re As New Regex("^\p{IsBasicLatin}*$")
If re.IsMatch(TextBox1.Text) Then
    Label2.Text = "基本ラテン文字のみ(または未入力)"
Else
    Label2.Text = "基本ラテン以外が含まれている"
End If



さて…定義が難しいのが「全角」。

Unicode の世界だと、全角でも半角でも無い文字があるんですよね。
たとえば「👳🏽‍♂️」とか。

Shift_JIS で扱われていた文字であっても、たとえば「β」や「┏」の
文字幅は文脈依存とされており、ギリシャ語圏だと半角扱いが普通で、
日本語圏だと全角の事が多い(半角の事もある)という。

https://ja.wikipedia.org/wiki/%E6%9D%B1%E3%82%A2%E3%82%B8%E3%82%A2%E3%81%AE%E6%96%87%E5%AD%97%E5%B9%85
https://www.unicode.org/Public/13.0.0/ucd/EastAsianWidth.txt

なので、全角を定義するというよりも、「半角として扱いたい範囲」を先に定めて、
それを含まないものを「全角のみ」と判断する方向で検討してみてください。