2013-02-09 87 views
3

我是新來的正則表達式,我試圖用正則表達式驗證數據庫中的收據號碼。7位數字後跟可選3個字母的正則表達式

我們的收入就可以派上以下格式:

  • (Manditory七個數字,沒有更多,不會少)
  • 0126456a(Manditory七個數字一個字母AZ)
  • 0126456ab(Manditory七位數以兩個字母AZ)
  • 0126456abc(Manditory七個數字用三個字母AZ)

我試過使用一堆不同的正則表達式組合,但似乎沒有任何工作。現在我有:

(\d)(\d)(\d)(\d)(\d)(\d)(\d)([a-z])?([a-z])?([a-z])? 

但是,這是允許超過七位數字,並允許超過3個字母。

這是Access 2010中內我的VBA功能,將驗證表達式:

Function ValidateReceiptNumber(ByVal sReceipt As String) As Boolean 

    If (Len(sReceipt) = 0) Then 
     ValidateReceiptNumber = False 
     Exit Function 
    End If 

    Dim oRegularExpression  As RegExp 

' Sets the regular expression object 
    Set oRegularExpression = New RegExp 

    With oRegularExpression 
' Sets the regular expression pattern 
     .Pattern = "(\d)(\d)(\d)(\d)(\d)(\d)(\d)([a-z])?([a-z])?([a-z])?" 

' Ignores case 
     .IgnoreCase = True 

'  Test Receipt string 
     ValidateReceiptNumber = .Test(sReceipt) 

    End With 
End Function 

回答

10

你可能需要在兩端用錨。正是7 digits

^\d{7}[a-z]{0,3}$ 
  • \d{7}比賽 - :進一步您正則表達式可以簡化爲。您不需要爲此使用次。
  • {0,3}創建一個範圍,和0至3的重複前述圖案,
  • Caret(^)
  • Dollar($)的開始相匹配的線的端部相匹配相匹配。
6

^(\d){7}[a-z]{0,3}$可能運作良好。 ^$將分別匹配行的開始和結束。

3

您可能希望通過使用錨來確保您匹配整個字符串。

^(\d)(\d)(\d)(\d)(\d)(\d)(\d)([a-z])?([a-z])?([a-z])?$ 

您還可以簡化正則表達式。首先,你不需要所有的括號。

^\d\d\d\d\d\d\d[a-z]?[a-z]?[a-z]?$ 

此外,您可以使用有限的重複,以防止重複自己。

^\d{7}[a-z]{0,3}$ 

{7}手段 '正好爲7倍',並{0,3}手段 '0-3倍'。

相關問題