misc.log

日常茶飯事とお仕事と

いわゆる「半角文字」チェック

入力された文字が、いわゆる半角文字、ShiftJISであれば1バイトで表現できる文字かどうかを判断するロジックを組む必要があったので、過去のコードをひっくり返してみました。

某作業で作ったコードがたぶん使えそう。

方法はいろいろありますが、これは正規表現で文字の範囲を指定して、それと一致するかどうかを見るというものです。文字範囲はShiftJISの00~FF、ユニコードのff61~ff9fを半角文字として許可するというものになってます。ユニコード側の判断パターンがいるかどうか、はちょっとよくわからないのですが……。念のため入れてます(実際、ユニコードSJISも冒頭部分のコード体系は一緒なので、たしか判断ロジックとしてはSJISの範囲チェックに引っかかってたような……)。

Dim result As Boolean = False
Dim codePattern As New Regex("[\x00-\xff|\uff61-\uff9f]")
If inputString <> String.Empty Then
    result = codePattern.IsMatch(inputString)
End If

これだと制御記号もOKとなるので、入力データに制御記号が入る場合は適宜調整が必要です。