1. 程式人生 > >限制字串輸入——正則表示式(VB.NET)

限制字串輸入——正則表示式(VB.NET)

   1、概述

在做機房收費系統的時候,幾乎所有的窗體上都存在著文字框或者組合框,當用戶進行操作的時候,首先要判斷是否為空,然後再對各種屬性進行判斷,比如;卡號、學號、金額等只能輸入數字,有些資訊只能輸入字母,或者將一些資訊的輸入設為只能輸入數字和字母。舉個例子,我們註冊郵箱的時候,就會有一些特定字元的設定:

    下面是163郵箱註冊的頁面

    

    在我們做機房收費系統時,如果用常規的方法,直接用ASCII碼進行設定的話,就感覺有點複雜,現在我們一起來認識認識程式設計師必備的七種技能之一的“正則表示式”。

 2、什麼是正則表示式?

  首先看一張漫畫:

 

 正則表示式就是用事先定義好的一些特定字元、及這些特定字元的組合,組成一個“規則字串”,這個“規則字串”用來表達對字串的一種過濾邏輯。

   舉個例子:只能輸入數字:“^[0-9]*$”。

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

             只能輸入由26個英文字母組成的字串:“^[A-Za-z]+$”。

  3、怎麼使用正則表示式?

 下面就一起來看看怎麼使用它。

   咱們以新增新使用者的窗體為例:

                       

    Public Const C_REGULAR_LenNum = "^[A-Za-z0-9]+$"         '只能輸入由數字和26個英文字母組成的字元
    Public Const C_REGULAR_NumLimit = "^\\d{6,16}$"          '只能輸入6至16位的數字。
    ''' <summary>
    ''' 檢測輸入字串是否匹配正則表示式項
    ''' </summary>
    ''' <param name="strPattern">正則表示式項</param>
    ''' <param name="TextReg">輸入字串</param>
    ''' <returns>返回結果是否匹配</returns>
    ''' <remarks><span style="font-family:KaiTi_GB2312;">2014年8月28日16:02:20</span></remarks>
    Public Function funCheckRegular(ByVal strPattern As String, TextReg As String)
        Return Regex.IsMatch(TextReg, strPattern)
    End Function
    ''' <summary>
    ''' 具體執行的判斷函式,判斷是否輸入數字
    ''' </summary>
    ''' <param name="arrayControl">結構體陣列</param>
    ''' <returns>True則表示匹配,false則不匹配</returns>
    ''' <remarks>2014-07-09 10:30:24</remarks>
    Public Function CheckRegular(ByVal arrayControl() As Term, ByVal strPattern As String, Warning As String) As Boolean
        Dim termControl As Term                                      '宣告一個Term型別變數termControl

        '遍歷結構體陣列中的所有元素,如果控制元件文字輸入不合法,則給出相應返回值
        For Each termControl In arrayControl                         '遍歷結構體陣列中所有元素
            If TypeOf termControl.controlSub Is TextBox Then         '判斷控制元件是否為文字框
                If termControl.controlSub.Text.Trim <> "" Then       '判斷文字框內容是否為空,不為空往下執行
                    If funCheckRegular(strPattern, termControl.controlSub.Text) = False Then
                        MessageBox.Show(termControl.strText + "欄 - -!" + Warning, "友情提示", MessageBoxButtons.OK, MessageBoxIcon.Information)
                        termControl.controlSub.Focus()               '為空控制元件得到焦點
                        Return False
                        Exit Function
                    End If
                End If
            End If
        Next
        Return True
    End Function

下面的程式碼是在介面層(UI)如何呼叫:

    Public Sub RdimStrNum()
        ReDim Preserve arrayControl(0)  '重定義陣列維數
        '初始化陣列
        arrayControl(0) = New Term(txtUserID, "使用者名稱")
    End Sub

    Public Sub RdimNum()
        ReDim Preserve arrayControl(1)  '重定義陣列維數
        '初始化陣列
        arrayControl(0) = New Term(txtUserPWD, "密碼")
        arrayControl(1) = New Term(txtConfirm, "確認密碼")
    End Sub

        '判斷使用者輸入是否合法(數字和字母)
        Call RdimStrNum()
        Dim strPattern = C_REGULAR_LenNum        '正則表示式
        Dim Warning As String = "只能輸入由數字和26個英文字母組成的字元"
        If CheckRegular(arrayControl, strPattern, Warning) = False Then
            Exit Sub
        End If

        '判斷使用者輸入是否合法(數字)
        Call RdimNum()
        Dim pattern = C_REGULAR_NumLimit    '正則表示式
        Dim Warn As String = "請輸入6至16位數字"
        If CheckRegular(arrayControl, pattern, Warn) = False Then
            Exit Sub
        End If

  3、結束語

 在程式設計師日常工作中,資料處理佔據了相當的比重。而所有的資料之中文字又佔據了相當的比重。文字能夠被人理解、具有良好的透明性,利於系統開發、測試和維護等就必需要有一定規律遵循一種規則,而正則表示式正是我們所需要的,它提供給我們強大的字串處理的能力。