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图!点击连接查看
总结
正則表達式的特点是:
1.灵活性、逻辑性和功能性非常的强;
2.能够迅速地用极简单的方式达到字符串的复杂控制效果
3.对于刚接触的人(我)来说,比較晦涩难懂。
正則表達式博大精深,能够做到很多你想不到的事情,赶紧试试吧!
很多其它了解,请点击:http://baike.baidu.com/view/94238.htm?
fr=aladdin
VB.NET利用正則表達式巧妙限制字符输入的更多相关文章
- iOS_正則表達式
iOS 正則表達式 正則表達式,又称正规表示法.常规表示法(英语:Regular Expression,在代码中常简写为regex.regexp或RE).计算机科学的一个概念. 正則表達式使用单个字符 ...
- 7.4 Javascript:表单验证-揭开正則表達式的面纱
用元字符匹配对应的字符类型 创建正則表達式有点像创建字符串字面量,仅仅只是正則表達式出如今一对"/"里 正則表達式中会用到一级元字符.用于连接字母与数字 "." ...
- PHP经常使用正則表達式汇总
1. 平时做站点常常要用正則表達式,以下是一些解说和样例,仅供大家參考和改动使用: 2. "^\d+$" //非负整数(正整数 + 0) 3. "^ ...
- Python——正則表達式(2)
本文译自官方文档:Regular Expression HOWTO 參考文章:Python--正則表達式(1) 全文下载 :Python正則表達式基础 ======================== ...
- 使用正則表達式的格式化与高亮显示json字符串
使用正則表達式的格式化与高亮显示json字符串 json字符串非常实用,有时候一些后台接口返回的信息是字符串格式的,可读性非常差,这个时候要是有个能够格式化并高亮显示json串的方法那就好多了,以下看 ...
- JavaScript正則表達式知识汇总
Js 正則表達式知识汇总 正則表達式: 1.什么是RegExp?RegExp是正則表達式的缩写.RegExp 对象用于规定在文本中检索的内容. 2.定义RegExp:var +变量名=new RegE ...
- vb.net 正則表達式 取 固定格式的字符
vb.net 正則表達式 取 固定格式的字符: 原始字符串:strSqlTmp="select * from A_TEST where a_data = '@1@' and b_link = ...
- Perl入门(四)Perl的正則表達式
正則表達式是Perl语言的特色.主要的语法不是非常难,可是编写一个符合需求.高效的正則表達式.还是有一些挑战的. Perl的三种匹配模式 1.查找 语法:m/正則表達式内容/; 作用:查找匹配内容中是 ...
- python 学习笔记 10 -- 正則表達式
零.引言 在<Dive into Python>(深入python)中,第七章介绍正則表達式,开篇非常好的引出了正則表達式,以下借用一下:我们都知道python中字符串也有比較简单的方法, ...
随机推荐
- CSS:CSS Float(浮动)
ylbtech-CSS:CSS Float(浮动) 1.返回顶部 1. CSS Float(浮动) 什么是 CSS Float(浮动)? CSS 的 Float(浮动),会使元素向左或向右移动,其周围 ...
- (52) C# 串口通讯
一.串口通讯基本参数 1.波特率:每秒传输n个多少个二进制位. 例如 9600 b/s = 1200 B/s= 1.172KB/S 2.传输数据格式 数据格式由起始位(start bit).数据位 ...
- Dubbo入门到精通学习笔记(十六):Keepalived+Nginx实现高可用Web负载均衡
文章目录 Keepalived+Nginx实现高可用Web负载均衡 Keepalived+Nginx实现高可用Web负载均衡 高可用架构篇 Keepalived + Nginx 实现高可用 Web 负 ...
- linux 创建多级目录 mkdir -p
原文地址:http://www.dutor.net/index.php/2010/06/cmd-mkdir-p/ mkdir的-p选项允许你一次性创建多层次的目录,而不是一次只创建单独的目录.例如,我 ...
- asp.net core容器&mysql容器network互联 & docker compose方式编排启动多个容器
文章简介 asp.net core webapi容器与Mysql容器互联(network方式) docker compose方式编排启动多个容器 asp.net core webapi容器与Mysql ...
- font的基本知识
字体 你无法预料到用户是否可以访问样式表里定义的字体.所以在设置字体时,在属性后指定一个替代的字体列表是个不错的主意. 在这个字体列表的最后加上系统字体中的一个,如:serif,sans-serif, ...
- PAT_A1091#Acute Stroke
Source: PAT A1091 Acute Stroke (30 分) Description: One important factor to identify acute stroke (急性 ...
- Java内存通道
对文件执行I/O的另一种方法是将文件的一个区域映射到物理内存,并将其作为内存数组.可以使用MappedByteBuffer来执行内存映射文件I/O. 要使用内存映射文件I/O,请为文件获取FileCh ...
- C# WinfForm 控件之dev报表 XtraReport (二) 固定数据绑定
已经子解了XtraReport的初步用法 现在再进一步了解 数据绑定 我们还是先不整高深的 先来个写死的 让我们的数据库数据可以通过报表呈现先 1.准备 还在上节基础上 只不过我把form1 中的Do ...
- springboot配置swagger-rest文档
前言 swagger是一个很好的restful形式的api文档,可以通过比较小的侵入来提供很好的restful的文档.因为swagger是依赖服务生成的,所以其实是依赖服务的,这也算是它的一个小缺点吧 ...