【个人机房重构】——限制字符串输入(正则表达式)

来源:互联网 发布:阿里巴巴标题优化技巧 编辑:程序博客网 时间:2024/06/06 01:54

前言:在做机房时,对于文本框输入字符串的各种限制,我想应该是每个人心中挥之不去的痛。不过听过有种高大上的方式,可以解决这个问题。



一、概述


   在做机房收费系统的时候,几乎所有的窗体上都存在着文本框或者组合框,当用户进行操作的时候,首先要判断是否为空,然后再对各种属性进行判断,比如;卡号、学号、金额等只能输入数字,有些信息只能输入字母,或者将一些信息的输入设为只能输入数字和字母。举个例子,我们注册邮箱的时候,就会有一些特定字符的设置:


    下面是163邮箱注册的页面

    


    在我们做机房收费系统时,如果用常规的方法,直接用ASCII码进行设置的话,就感觉有点复杂,现在我们一起来认识认识程序员必备的七种技能之一的“正则表达式”。



二、什么是正则表达式?


  首先看一张漫画:


 


   正则表达式就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。


   举个例子:只能输入数字:“^[0-9]*$”。

             只能输入汉字:“^[\u4e00-\u9fa5]{0,}$”。

             只能输入由26个英文字母组成的字符串:“^[A-Za-z]+$”。



三、怎么使用正则表达式?


下面就一起来看看怎么使用它。

    咱们以添加新用户的窗体为例:

                       

  

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. Public Const C_REGULAR_LenNum = "^[A-Za-z0-9]+$"         '只能输入由数字和26个英文字母组成的字符  
  2. Public Const C_REGULAR_NumLimit = "^\\d{6,16}$"          '只能输入6至16位的数字。  

[plain] view plaincopy在CODE上查看代码片派生到我的代码片

  1. ' 检测输入字符串是否匹配正则表达式项  
  2. Public Function funCheckRegular(ByVal strPattern As String, TextReg As String)  
  3.     Return Regex.IsMatch(TextReg, strPattern)  
  4. End Function  

  5. ' 具体执行的判断函数,判断是否输入数字  
  6. Public Function CheckRegular(ByVal arrayControl() As Term, ByVal strPattern As String, Warning As String) As Boolean  
  7.     Dim termControl As Term                                      '声明一个Term类型变量termControl  
  8.   
  9.     '遍历结构体数组中的所有元素,如果控件文本输入不合法,则给出相应返回值  
  10.     For Each termControl In arrayControl                         '遍历结构体数组中所有元素  
  11.         If TypeOf termControl.controlSub Is TextBox Then         '判断控件是否为文本框  
  12.             If termControl.controlSub.Text.Trim <> "" Then       '判断文本框内容是否为空,不为空往下执行  
  13.                 If funCheckRegular(strPattern, termControl.controlSub.Text) = False Then  
  14.                     MessageBox.Show(termControl.strText + "栏 - -!" + Warning, "友情提示", MessageBoxButtons.OK, MessageBoxIcon.Information)  
  15.                     termControl.controlSub.Focus()               '为空控件得到焦点  
  16.                     Return False  
  17.                     Exit Function  
  18.                 End If  
  19.             End If  
  20.         End If  
  21.     Next  
  22.     Return True  
  23. End Function  


下面的代码是在界面层(UI)如何调用:

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. Public Sub RdimStrNum()  
  2.     ReDim Preserve arrayControl(0)  '重定义数组维数  
  3.     '初始化数组  
  4.     arrayControl(0) = New Term(txtUserID, "用户名")  
  5. End Sub  
  6.   
  7. Public Sub RdimNum()  
  8.     ReDim Preserve arrayControl(1)  '重定义数组维数  
  9.     '初始化数组  
  10.     arrayControl(0) = New Term(txtUserPWD, "密码")  
  11.     arrayControl(1) = New Term(txtConfirm, "确认密码")  
  12. End Sub  

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. '判断用户输入是否合法(数字和字母)  
  2. Call RdimStrNum()  
  3. Dim strPattern = C_REGULAR_LenNum        '正则表达式  
  4. Dim Warning As String = "只能输入由数字和26个英文字母组成的字符"  
  5. If CheckRegular(arrayControl, strPattern, Warning) = False Then  
  6.     Exit Sub  
  7. End If  
  8.   
  9. '判断用户输入是否合法(数字)  
  10. Call RdimNum()  
  11. Dim pattern = C_REGULAR_NumLimit    '正则表达式  
  12. Dim Warn As String = "请输入6至16位数字"  
  13. If CheckRegular(arrayControl, pattern, Warn) = False Then  
  14.     Exit Sub  
  15. End If  

三、结束语


   在程序员日常工作中,数据处理占据了相当的比重。而所有的数据之中文本又占据了相当的比重。文本能够被人理解、具有良好的透明性,利于系统开发、测试和维护等就必需要有一定规律遵循一种规则,而正则表达式正是我们所需要的,它提供给我们强大的字符串处理的能力。


    做机房个人版重构的时候,采用的是传统的限制字符串输入的方式。不过,在看到这篇文章后,眼前豁然一亮的感觉。看到“正则表达式”,顿感高大上。

    有时候,我们一直在原地踏步、停滞不前。其实,我们缺少的就是一种发现新事物、并努力去尝试新事物的勇气。


转自:http://blog.csdn.net/zlts000/article/details/38021335

0 0