在做机房合作的时候,很多东西都进行了“改革”,听二牛说输入的字符长度限制可以用正则表达式,当然限制字符长度不仅可以用这种方法来写,还有通过设置文本框属性等办法来解决。不过利用正则表达式,我还是没没想到。反正正则表达式都学过了,为什么不能拿过来用呢?让它和我原来的方法比试比试。
一、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哈!
@H_301_120@