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の地域設定コントロールパネルの設定に影響を受けるようですので、実践では使用しないほうがよいかも