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中字符串也有比較简单的方法, ...
随机推荐
- AntiPlug
反插件工程 #pragma once #ifndef __ENHANFUNC_H__ #define __ENHANFUNC_H__ #include <iostream> #includ ...
- CPUID读取有关Cache的信息
1: void cpuidTest() 2: { 3: u32 val_eax, val_ebx, val_ecx, val_edx; 4: asm("cpuid" 5: : &q ...
- Git 学习第一天
本文是根据廖雪峰老师的git教程记录的学习笔记,特此说明,原教程链接https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c ...
- 常用内置模块(四)——subprocess、re
常用模块(四) 一.subprocess模块 1.subprocess为子流程模块,用于执行系统命令,该模块在Python全栈开发中不常用 2.常用方法 run 返回一个表示执行结果的对象 call ...
- Spring Boot主要目标
Spring Boot主要目标 Spring Boot的主要目标是: 为所有Spring开发提供一个基本的,更快,更广泛的入门体验. 开箱即用,但随着需求开始偏离默认值,快速启动. 提供大型项目(例如 ...
- 问题:Error running 'lugia-web': Address loaclhost:1099 is already in use
解决方法:cmd输入下面命令: 第一步: netstat -ano|findstr 1099 找到对应的pid 为3576.(每次不一样). 第二步:taskkill -f -pid 3576
- YApi导入swagger生成的接口
1.swagger的JSON地址,net或netcore开发环境下 2.配置在内网中,localhost请用对应的IP地址替换,在浏览器地址栏中输入以上地址,会返回一个json格式的文档 3.导入 4 ...
- workman
workman安装: 环境安装: 检测依赖环境是否安装 rpm -qa | grep “软件或者包的名字”或者 yum list installed eg: rpm -qa | grep libeve ...
- eureka多实例,模拟多台机器
本文只有一个eureka server项目,运行在不同的端口,模拟两台eureka服务.开发使用eclipse 4.8 先说pom.xml文件,如果出现问题,首先考虑springboot和其他包版本冲 ...
- Mysql 查询表中某字段的重复值,删除重复值保留id最小的数据
1 查询重复值 ); 2 删除重复值 -- 创建临时表 ) ); -- 把重复数据放进临时表 INSERT Hb_Student_a SELECT id,studentNumber FROM Hb_S ...