在VB.NET中使用正则表达式必须先引入命名空间System.Text.RegularExpressions,该命名空间包含一下七个类:Regex、Match、MatchCollection、GroupCollection、CaptureCollection、Group、Capture。Regex类表示不可变(只读)正则表达式类,设置待匹配字符串的模式。Match类表示正则表达式匹配操作的结果。MatchCollection 类表示成功的非重叠匹配的序列,即匹配后得到的字符串集合。在正则表达式中应用最多的就是这三个类。
下面就VB.NET应用实例来说明正则表达式对输入框的内容限制:
首先,是在模块中封装正则表达式定义过程。
然后,在编辑的窗体中重定义两个数组,实例化Term结构体数组,再在需要的时候调用它。
- Imports System.Text.RegularExpressions
- Module Module1
- Public Const C_REGULAR_NumLimit = "^\d{0,9}$" '只能输入0~9的数字的正则表达式
- Public Const C_REGULAR_Chinese = "^[\u4e00-\u9fa5]{0,}$" '只能输入汉字的正则表达式
- ''' <summary>
- ''' 检测输入字符串是否匹配正则表达式项
- ''' </summary>
- ''' <param name="strPattern"></param>
- ''' <param name="TextReg"></param>
- ''' <returns></returns>
- Public Function funCheckRegular(ByVal strPattern As String,TextReg As String)
- Return Regex.IsMatch(TextReg,strPattern)
- End Function
- ''' <summary>
- ''' 具体执行的判断函数,判断是否输入数字
- ''' </summary>
- ''' <param name="arrayControl"></param>
- ''' <param name="strPattern"></param>
- ''' <param name="Warning"></param>
- ''' <returns></returns>
- Public Function CheckRegular(ByVal arrayControl() As Term,ByVal strPattern As String,Warning As String) As Boolean
- Dim termControl As Term '声明一个Term类型变量termControl
- '遍历结构体数组中的所有元素,如果控件文本输入不合法,则给出相应返回值
- For Each termControl In arrayControl '遍历结构体数组中所有元素
- If TypeOf termControl.controlSub Is TextBox Then '判断控件是否为文本框
- If termControl.controlSub.Text.Trim <> "" Then '判断文本框内容是否为空,不为空往下执行
- If funCheckRegular(strPattern,termControl.controlSub.Text) = False Then
- MessageBox.Show(termControl.controlSub.Text + "栏 - -!" + Warning,"友情提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
- termControl.controlSub.Focus() '为空控件得到焦点
- Return False
- Exit Function
- End If
- End If
- End If
- Next
- Return True
- End Function
- ''' <summary>
- ''' 定义结构体
- ''' </summary>
- Public Structure Term
- Dim controlSub As Control
- Dim strText As String
- Sub New(ByVal controlSub As Control,ByVal strText As String)
- With Me
- .controlSub = controlSub
- .strText = strText
- End With
- End Sub
- End Structure
- ''' <summary>
- ''' 定义Term类型的结构体数组
- ''' </summary>
- Public arrayControl() As Term
- Dim Panel As Control
- End Module
- Public Sub Rdim()
- ReDim Preserve arrayControl(4) '重定义数字数组维数
- '初始化数组
- arrayControl(0) = New Term(txtCardNo,"卡号")
- arrayControl(1) = New Term(txtCash,"充值金额")
- arrayControl(2) = New Term(txtStudentNo,"学号")
- arrayControl(3) = New Term(txtGrade,"年级")
- arrayControl(4) = New Term(txtClass,"班级")
- End Sub
- Public Sub RdimStrNum()
- ReDim Preserve arrayControl(1) '重定义字符数组维数
- '初始化数组
- arrayControl(0) = New Term(txtDepartment,"系别")
- arrayControl(1) = New Term(txtName,"姓名")
- End Sub
- '判断用户输入是否合法(数字)。
- Call Rdim()
- Dim strPattern = C_REGULAR_NumLimit '正则表达式
- Dim Warning As String = "只能输入0-9个数字"
- If CheckRegular(arrayControl,strPattern,Warning) = False Then
- Exit Sub
- End If
- '判断用户输入是否合法(汉字)。
- Call RdimStrNum()
- Dim pattern = C_REGULAR_Chinese '正则表达式
- Dim Warn As String = "只能输入汉字"
- If CheckRegular(arrayControl,pattern,Warn) = False Then
- Exit Sub
- End If
小结:正则表达式的特点是:1. 灵活性、逻辑性和功能性非常的强;2. 可以迅速地用极简单的方式达到字符串的复杂控制。
刚开始接触正则表达式,以后要多多学习。