我是正则表达式的新手,我正在尝试使用正则表达式验证数据库中的收据编号。
我们的收据可以采用以下格式:
我尝试过使用一堆不同的正则表达式组合,但似乎都没有。现在我有:
(\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
答案 0 :(得分:10)
您可能需要在末端使用锚点。此外,您的正则表达式可以简化为: -
^\d{7}[a-z]{0,3}$
\d{7}
完全匹配7 digits
。您不需要使用\d
7
时间。{0,3}
创建一个范围,并匹配前一个模式的0到3次重复,Caret(^)
匹配行的开头Dollar($)
匹配该行的结尾。答案 1 :(得分:6)
^(\d){7}[a-z]{0,3}$
可能效果很好。 ^
和$
将分别匹配行的开头和结尾。
答案 2 :(得分: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次”。