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中字符串也有比較简单的方法, ...
随机推荐
- python pip时openssl的错误
也不知道看了哪个方法弄成这个样子的,也没办法,下面方法可用 https://blog.csdn.net/chr1341901410/article/details/80995451
- Guava EventBus集成spring
EventBus 不是通用的消息系统,也不是用来做进程间的通信的,而是在进程内,用于解耦两段直接调用的业务逻辑: 1.代码结构 event:eventbus中流转的事件(消息),包结构按照业务模块在细 ...
- 文件下载java代码
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletExcepti ...
- ( 转)WPF面板布局介绍Grid、StackPanel、DockPanel、WrapPanel
回顾 上一篇,我们介绍了基本控件及控件的重要属性和用法,我们本篇详细介绍WPF中的几种布局容器及每种布局容器的使用场景,当 然这些都是本人在实际项目中的使用经验,可能还存在错误之处,还请大家指出. 本 ...
- 从pcap文件中分析出数据包
import dpkt import struct import sys,os f=file(sys.argv[1],"rb") pcap=dpkt.pcap.Reader(f) ...
- 20140719 找到单链表的倒数第K个节点 判断一个链表是否成为一个环形 反转
1.找到单链表的倒数第K个节点 2.判断一个单链表对否形成环形 3.单链表翻转
- python:Django 简介。
Django是基Python的重要WEB框架. 1.安装Django Web框架 安装 pip 安装 在命令行模式 执行 [pip install django == 2.0]或者 [pip in ...
- Python的datetime模块使用
两个常量 MAXYEAR:9999 MINYEAR:1 五个类 datetime.datetime:日期时间类 datetime.date:日期类 datetime.time:时间类 datetime ...
- ABP 3.7版本迁移数据库报错未能加载文件或程序集“Castle.Core, Version=4.0.0.0”
ABP 3.7 3.8版本升级后迁移数据库,报错未能加载文件或程序集“Castle.Core, Version=4.0.0.0”,System.ComponentModel.Annotations也可 ...
- cross compile 交叉编译 ffmpeg
ffmpeg 支持各种压缩格式的视频解码库,经常出现在各种播放器中,交叉编译也是一项麻烦的事情. 1. 下载ffmpeg 源码包 http://ffmpeg.org/releases/ffmpeg ...