利用正則表達式來設置最大輸入字符長度


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

一、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哈!



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM