2013-02-09 82 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倍'。

相关问题