首页 > 代码库 > VB.NET利用正则表达式巧妙限制字符输入

VB.NET利用正则表达式巧妙限制字符输入

    在通常的程序设计中,对字符串的操作是不可缺少的部分。例如,我们做的机房收费系统,里面有很多的文本框,按照不同的需要,我们要输入不同的内容,卡号要输入数字,姓名框也要限制输入字符的长度。有时候甚至还需要从字符串中寻找特定的部分,或者对某一部分进行替换、删除等等。

使用传统的字符串函数判断方法或静态字符串操作方法,费时费力,且只能查找字符串中固定不变的部分,缺乏灵活性。

那有什么简单实用的方法呢?通过网络我了解到了一个新的板块“正则表达式

 

正则表达式

使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。通过规定待查找字符串的模式,查找同一类型的字符串,例如要在EMAIL格式的字符串(如wangyi@163.com)中分解出用户名和服务器名,可以定义如下的正则表达式(?<user>[^@]+)@(?<host>.+),然后使用相应的解析器进行解析,得到两个分组user组和host组,user组里存储用户名wangyi,host组里存放服务器名163.com,而用传统的方法是很难实现这种分解的。

 

由此可见,作为一种字符串处理方式,正则表达式的灵活与强大确实是传统字符串处理方式无法相比的。

 

vb.net 中的正则表达式处理类

在VB.NET中使用正则表达式必须先引入命名空间System.Text.RegularExpressions,该命名空间包含一下七个类:Regex、Match、MatchCollection、GroupCollection、CaptureCollection、Group、Capture。

Regex类表示不可变(只读)正则表达式类,设置待匹配字符串的模式。Match类表示正则表达式匹配操作的结果。MatchCollection 类表示成功的非重叠匹配的序列,即匹配后得到的字符串集合。在正则表达式中应用最多的就是这三个类。

 

使用正则表达式类的通用方法是:

首先生成一个Regex类的实例,并在传入参数中输入正则表达式的模式,然后使用Regex类的相应方法,如IsMatch(判断是否匹配)、Match(返回匹配得到的字符串)等等。

牛刀小试

代码

Imports System.Text.RegularExpressions
Public Class frmTest

    '定义存放正则表达式的常量
    Private Const C_REGULAR_Card = "^\d{0,12}$"                     '卡号的输入正则表达式(长度12以内的数字)
    Private Const C_REGULAR_Length = "^.{0,10}$"                    '输入字符长度正则表达式(长度10以内字符)
    Private Const C_REGULAR_Chinese = "^[\u4e00-\u9fa5]{0,}$"       '只能输入汉字的正则表达式

    Private Sub btnCheck_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCheck.Click
        If txtRegular.Text.Trim.Length = 0 Then                     '如果字符为空,退出过程
            MsgBox("请输入字符!")
            Exit Sub
        End If

        Dim strPattern As String = String.Empty                     '正则表达式变量
        Dim strCheckedText As String = String.Empty                 '选择的检查项
        '判断赋值
        If CheckCard.Checked Then
            strPattern = C_REGULAR_Card                             '赋值正则表达式
            strCheckedText = CheckCard.Text                         '赋值检查项
        ElseIf CheckLength.Checked Then
            strPattern = C_REGULAR_Length
            strCheckedText = CheckLength.Text
        ElseIf CheckChinese.Checked Then
            strPattern = C_REGULAR_Chinese
            strCheckedText = CheckChinese.Text
        End If

        '调用判断函数,传入参数,并给出相应提示
        If funCheckRegular(strPattern, txtRegular.Text) = True Then
            MsgBox("<<" + strCheckedText + ">>---符合规范!", MsgBoxStyle.Information, Me.Text)
        Else
            MsgBox("<<" + strCheckedText + ">>---不符规范!", MsgBoxStyle.Exclamation, Me.Text)
        End If
    End Sub
    ''' <summary>
    ''' 判断输入字符串是否匹配正则表达式
    ''' </summary>
    ''' <param name="strPattern">正则表达式变量</param>
    ''' <param name="TextReg">输入字符串变量</param>
    ''' <returns>返回布尔值,匹配返回True,否则返回False</returns>
    ''' <remarks>2014-07-17 19:54:25 牛迁迁</remarks>
    Public Function funCheckRegular(ByVal strPattern As String, TextReg As String) As Boolean
        Return Regex.IsMatch(TextReg, strPattern)
    End Function

    Private Sub btnClear_Click_1(sender As Object, e As EventArgs) Handles btnClear.Click
        txtRegular.Clear()
    End Sub
End Class                                               ’注:这只是一个小Demo,没有采用分层写法。

 

显示:(请看效果,其实它会动的,可惜CSDN竟然不支持gif图!点击连接查看

http://m18831658786.blog.163.com/prevPhDownload.do?host=m18831658786&albumId=269674986&photoId=8926571224)

 

总结

正则表达式的特点是:

1.灵活性、逻辑性和功能性非常的强;

2.可以迅速地用极简单的方式达到字符串的复杂控制效果

3.对于刚接触的人(我)来说,比较晦涩难懂。

 正则表达式博大精深,能够做到许多你想不到的事情,赶紧试试吧!

 

更多了解,请点击:http://baike.baidu.com/view/94238.htm?fr=aladdin