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

版权声明:本文为博主原创文章。未经博主同意不得转载。

https://blog.csdn.net/u010028869/article/details/37913867

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

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

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

 

正則表達式

使用单个字符串来描写叙述、匹配一系列符合某个句法规则的字符串。

在非常多文本编辑器里,正則表達式通常被用来检索、替换那些符合某个模式的文本。

通过规定待查找字符串的模式。查找同一类型的字符串,比如要在EMAIL格式的字符串(如wangyi@163.com)中分解出username和server名,能够定义例如以下的正則表達式(?<user>[^@]+)@(?

<host>.+),然后使用对应的解析器进行解析,得到两个分组user组和host组。user组里存储usernamewangyi,host组里存放server名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


 

【推广】 免费学中医,健康全家人
原文地址:https://www.cnblogs.com/ldxsuanfa/p/10841045.html