VB.NETにて、特定の文字列(整数・実数・英字・日付・電話番号・郵便番号など)かをチェックする方法を記載します。
TextBox等で文字を入力する際、文字列が特定の文かチェックすることがよくあります。方法は沢山ありますが、正規表現を使用してチェックする方法を以下に記載します。
正規表現による特定文字列かの判断する
'半角数字か判断する Dim rHalfNumeric As New System.Text.RegularExpressions.Regex("^[0-9]+$") '半角整数値か判断する Dim rHalfDigit As New System.Text.RegularExpressions.Regex("^[+\-]?[0-9]+$") '半角実数値か判断する Dim rHalfReal As New System.Text.RegularExpressions.Regex("^[+-]?[0-9]*[\.]?[0-9]+$") '半角16進数か判断する Dim rHalfHex As New System.Text.RegularExpressions.Regex("^[a-fA-F0-9]+$") '半角英字か判断する Dim rHalfAlpha As New System.Text.RegularExpressions.Regex("^[a-zA-Z]+$") '半角英数字か判断する Dim rHalfAlphaNum As New System.Text.RegularExpressions.Regex("^[a-zA-Z0-9]+$") '半角日付文字か判断する Dim rHalfDate As New System.Text.RegularExpressions.Regex("\A([0-9]{2,4})/([0-9]{2})/([0-9]{2})\z") '半角カナ文字か判断する Dim rHalfKana As New System.Text.RegularExpressions.Regex("^[ア-ン]+$") '半角電話番号か判断する Dim rHalfPhone As New System.Text.RegularExpressions.Regex("\A\d{1,4}-\d{1,4}-\d{1,4}\z") '半角郵便番号か判断する Dim rHalfPost As New System.Text.RegularExpressions.Regex("\A\d{1,3}-\d{1,4}\z") '全角カナか判断する Dim rDblKatakana As New System.Text.RegularExpressions.Regex("^[ァ-ヴ!ー]+$") '全角かなか判断する Dim rDblHiragana As New System.Text.RegularExpressions.Regex("^[ぁ-ん!ー]+$") '使い方例 If Not rHalfPost.IsMatch("333-44444") Then MsgBox("以外の文字が含まれています。") End If
文字列の全部の文字が、全角・半角か判断関数
文字列には、半角、全角が混ざって設定されています。文字列内の全文字が、半角または全角か判断する方法です。
'文字列内の文字が、全て半角文字か判断する Public Shared Function IsSglString(ByVal str As String) As Boolean Dim num As Integer = System.Text.Encoding.GetEncoding("Shift_JIS").GetByteCount(str) Return num = str.Length End Function
'文字列内の文字が、全て全角文字か判断する Public Shared Function IsDblString(ByVal str As String) As Boolean Dim num As Integer = System.Text.Encoding.GetEncoding("Shift_JIS").GetByteCount(str) Return num = str.Length * 2 End Function
TryParse メソッドを使用して判断する
数値文字列、日付文字列は、TryParseメソッドを使用したほうが簡単に判断ができると思われます。
Dim bc As Boolean Dim str As String = "2345" '整数文字列か判断する bc = Integer.TryParse(str, Nothing) 'または bc = Integer.TryParse(str, System.Globalization.NumberStyles.Number,_ System.Globalization.CultureInfo.InvariantCulture, Nothing)
Dim bc As Boolean Dim str As String = "2345.6" '実数文字列か判断する bc = Double.TryParse(str, Nothing) 'または bc = Double.TryParse(str, System.Globalization.NumberStyles.Any,_ System.Globalization.CultureInfo.InvariantCulture, Nothing)
Dim bc As Boolean Dim str As String = "20/5/6" '日付文字列か判断する bc = DateTime.TryParse(str, Nothing) 'または Dim cinfo As New System.Globalization.CultureInfo("ja-JP") bc = DateTime.TryParse(str, cinfo, System.Globalization.DateTimeStyles.AssumeLocal, Nothing)
・パラメータは、NumberStyles列挙体・DateTimeStyles列挙体・CultureInfoクラスを参照してください
・ほかにParse関数や日付(DateTime)にはParseExact関数などもあります
・TryParse等は2パラメータは、Windowsの地域設定コントロールパネルの設定に影響を受けるようですので、実践では使用しないほうがよいかも