在做机房合作的时候,很多东西都进行了“改革”,听二牛说输入的字符长度限制可以用正则表达式,当然限制字符长度不仅可以用这种方法来写,还有通过设置文本框属性等办法来解决。不过利用正则表达式,我还是没没想到。反正正则表达式都学过了,为什么不能拿过来用呢?让它和我原来的方法比试比试。
一、ascii码小试
之前的代码是利用ascii码来编写的:
'限制输入的字符长度为0-16之间 Private Sub txtcardno_LostFocus() If Not Len(txtcardno) = 0 And Len(txtcardno) < 1 Or Len(txtcardno) > 16 Then MsgBox "卡号由1-16个字母和数字组成" txtcardno.SetFocus txtcardno.SelLength = Len(txtcardno.Text) End If End Sub
这样的话,每个窗体的每个文本框都需要写一遍代码,重复,重复,一直重复着,如何把它们封装起来呢?到大神出场了........
二、正则表达式出场
公共部分:
添加一个类
添加正则表达式的引用
Imports System.Text.RegularExpressions '添加正则表达式的引用
<pre name="code" class="vb"> '只能输入15位字符串的正则表达式 Public Const C_REGULAR_Length = "^.{0,15}$" '只能输入15位数字的正则表达式 Public Const C_REGULAR_Number = "^\d{0,15}$" #Region "检测输入字符串是否匹配正则表达式项" ''' <summary> ''' 检测输入字符串是否匹配正则表达式项 ''' </summary> ''' <param name="strPattern">正则表达式项</param> ''' <param name="TextReg">输入字符串</param> ''' <returns>返回结果是否匹配</returns> ''' <remarks>2015-6-1 9:36:39</remarks> Public Function funCheckRegular(ByVal strPattern As String,TextReg As String) Return Regex.IsMatch(TextReg,strPattern) End Function #End Region #Region "具体执行的判断函数,判断是否输入数字" ''' <summary> ''' 具体执行的判断函数,判断是否输入数字 ''' </summary> ''' <param name="arrayControl">结构体数组</param> ''' <returns>True则表示匹配,false则不匹配</returns> ''' <remarks>2015-6-1 9:36:39</remarks> 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) Then Else MessageBox.Show(termControl.strText + "栏 - -!" + Warning,"友情提示",MessageBoxButtons.OK,MessageBoxIcon.Information) '为空控件得到焦点 termControl.controlSub.Focus() Return False Exit Function End If End If End If Next Return True End Function #End Region
在需要调用的窗体上:
重新定义数组维数
Private Sub RdimNumber() ReDim Preserve arrayControl(2) '重定义数组维数 '初始化数组 arrayControl(0) = New Term(txtCardID,"卡号") arrayControl(1) = New Term(txtCash,"充值金额") End Sub
在click事件中添加
'检查输入是否合法(是否为数字) Call RdimNumber() Dim strPattern As String = C_REGULAR_Number Dim Warning As String = "请输入15位以内的数字!" If CheckRegular(arrayControl,strPattern,Warning) = False Then Exit Sub End If
这样就可以利用正则表达式来检查文本框是否为空了, 输入什么都不担心,就这么任性O(∩_∩)O~
总结:
通过一个简单的限制输入字符长度深深的印证了那句只有想不到的,没有做不到的,B/S的东西用到C/S里,就是这么任性O(∩_∩)O哈!