VB.NETで全角英数字のみを半角にする
2008/07/11
VB.NETで文字列中の全角文字を半角にしたい場合は、通常StrConv関数を使いますが、文字の種類を指定して変換することはできません。
カタカナだけ半角にしたくないという場合もよくありますので、そのような動作をする関数を作ってみました。
'Imports System.Text.RegularExpressions をソース先頭のImports部分に追加
'
'全角英数字を半角にする
Private Function WideAlphaNumToNarrow(ByVal inString As String) As String
Dim r As Regex
Dim mev As MatchEvaluator
'半角にしたい文字を正規表現で指定
r = New Regex("[0-9]+|[a-z]+|[A-Z]+|,|.")
mev = New MatchEvaluator(AddressOf ToNarrow)
WideAlphaNumToNarrow = r.Replace(inString, mev)
End Function
'
'WideAlphaNumToNarrow用のデリゲートメソッド
Private Shared Function ToNarrow(ByVal m As Match) As String
ToNarrow = StrConv(m.ToString, VbStrConv.Narrow)
End Function
この関数では全角英数字とカンマ、ピリオドのみ半角にします。
対象文字を変更したい場合は正規表現部分を適当に修正してください。
MatchEvaluatorの利用に関してはこちらを参考にさせていただきました。