上一篇文章对输入框的内容是否为空做出了判断,这篇文章,将介绍一种方法,对输入框的字段内容作出限制---正则表达式
什么是正则表达式?
正则表达式,又称正规表示法、常规表示法,计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。
正则表达式应用:
例如要在EMAIL格式的字符串(如wangyi@163.com)中分解出用户名和服务器名,可以定义如下的正则表达式(?<user>[^@]+)@(?<host>.+),然后使用相应的解析器进行解析,得到两个分组user组和host组,user组里存储用户名wangyi,host组里存放服务器名163.com,而用传统的方法是很难实现这种分解的。
在VB.NET中使用正则表达式必须先引入命名空间System.Text.RegularExpressions,该命名空间包含一下七个类:Regex、Match、MatchCollection、GroupCollection、CaptureCollection、Group、Capture。
Regex类表示不可变(只读)正则表达式类,设置待匹配字符串的模式。Match类表示正则表达式匹配操作的结果。MatchCollection 类表示成功的非重叠匹配的序列,即匹配后得到的字符串集合。在正则表达式中应用最多的就是这三个类。
实践篇:
首先,是在模块中封装正则表达式定义过程
然后,接上篇的实例化Term结构体数组过程,在窗体中重定义两个数组。
- Imports System.Text.RegularExpressions
- Module Module2
- Public Const C_REGULAR_NumLimit = "^\d{1,10}$" '卡号长度为10个以内字节的正则表达式
- Public Const C_REGULAR_Chinese = "^[\u4e00-\u9fa5]{0,}$" '只能输入汉字的正则表达式
- ' 检测输入字符串是否匹配正则表达式项
- Public Function funCheckRegular(ByVal strPattern As String,TextReg As String)
- Return Regex.IsMatch(TextReg,strPattern)
- End Function
- ' 具体执行的判断函数,判断是否输入数字
- 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
- End Module
最后就是在注册窗体中调用的过程。
- Public Sub RdimNum()
- 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 RdimNum()
- Dim strPattern = C_REGULAR_NumLimit '正则表达式
- Dim Warning As String = "只能输入1-10个数字"
- 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. 可以迅速地用极简单的方式达到字符串的复杂控制。
3. 对于刚接触的人来说,比较晦涩难懂。