1. 程式人生 > >利用正則表示式來設定最大輸入字元長度

利用正則表示式來設定最大輸入字元長度

        在做機房合作的時候,很多東西都進行了“改革”,聽二牛說輸入的字元長度限制可以用正則表示式,當然限制字元長度不僅可以用這種方法來寫,還有通過設定文字框屬性等辦法來解決。不過利用正則表示式,我還是沒沒想到。反正正則表示式都學過了,為什麼不能拿過來用呢?讓它和我原來的方法比試比試。

一、ascii碼小試

之前的程式碼是利用ascii碼來編寫的:

'限制輸入的字元長度為0-16之間
Private Sub txtcardno_LostFocus()
    If Not Len(txtcardno) = 0 And Len(txtcardno) < 1 Or Len(txtcardno) > 16 Then
        MsgBox "卡號由1-16個字母和數字組成"
        txtcardno.SetFocus
        txtcardno.SelLength = Len(txtcardno.Text)
        End If
End Sub

這樣的話,每個窗體的每個文字框都需要寫一遍程式碼,重複,重複,一直重複著,如何把它們封裝起來呢?到大神出場了........

二、正則表示式出場

公共部分:

新增一個類


新增正則表示式的引用

Imports System.Text.RegularExpressions   '新增正則表示式的引用
<pre name="code" class="vb"> '只能輸入15位字串的正則表示式
    Public Const C_REGULAR_Length = "^.{0,15}$"
    '只能輸入15位數字的正則表示式
    Public Const C_REGULAR_Number = "^\d{0,15}$"

#Region "檢測輸入字串是否匹配正則表示式項"
    ''' <summary>
    ''' 檢測輸入字串是否匹配正則表示式項
    ''' </summary>
    ''' <param name="strPattern">正則表示式項</param>
    ''' <param name="TextReg">輸入字串</param>
    ''' <returns>返回結果是否匹配</returns>
    ''' <remarks>2015-6-1 9:36:39</remarks>
    Public Function funCheckRegular(ByVal strPattern As String, TextReg As String)
        Return Regex.IsMatch(TextReg, strPattern)
    End Function
#End Region
#Region "具體執行的判斷函式,判斷是否輸入數字"
    ''' <summary>
    ''' 具體執行的判斷函式,判斷是否輸入數字
    ''' </summary>
    ''' <param name="arrayControl">結構體陣列</param>
    ''' <returns>True則表示匹配,false則不匹配</returns>
    ''' <remarks>2015-6-1 9:36:39</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) Then
                    Else
                        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
#End Region

在需要呼叫的窗體上:

重新定義陣列維數

Private Sub RdimNumber()
        ReDim Preserve arrayControl(2)    '重定義陣列維數
        '初始化陣列
        arrayControl(0) = New Term(txtCardID, "卡號")
        arrayControl(1) = New Term(txtCash, "充值金額")
    End Sub

在click事件中新增

'檢查輸入是否合法(是否為數字)
        Call RdimNumber()
        Dim strPattern As String = C_REGULAR_Number
        Dim Warning As String = "請輸入15位以內的數字!"
        If CheckRegular(arrayControl, strPattern, Warning) = False Then
            Exit Sub
        End If

這樣就可以利用正則表示式來檢查文字框是否為空了,輸入什麼都不擔心,就這麼任性O(∩_∩)O~


  
總結:

         通過一個簡單的限制輸入字元長度深深的印證了那句只有想不到的,沒有做不到的,B/S的東西用到C/S裡,就是這麼任性O(∩_∩)O哈!