Regex 正则表达式,7位数字后跟可选的3个字母
我不熟悉正则表达式,我正在尝试用正则表达式验证数据库中的收据编号 我们的收据可以采用以下格式:Regex 正则表达式,7位数字后跟可选的3个字母,regex,vba,ms-access,Regex,Vba,Ms Access,我不熟悉正则表达式,我正在尝试用正则表达式验证数据库中的收据编号 我们的收据可以采用以下格式: 0123456(下颌七指,不多不少) 0126456a(下颌骨七位数,带一个字母a-z) 0126456ab(下颌骨七位数,带两个字母a-z) 0126456abc(下颌七位,三个字母a-z) 我尝试过使用一系列不同的正则表达式组合,但似乎都不起作用。现在我有: (\d)(\d)(\d)(\d)(\d)(\d)(\d)([a-z])?([a-z])?([a-z])? 但这允许超过7位数字,允许超
- 0123456(下颌七指,不多不少)
- 0126456a(下颌骨七位数,带一个字母a-z)
- 0126456ab(下颌骨七位数,带两个字母a-z)
- 0126456abc(下颌七位,三个字母a-z)
(\d)(\d)(\d)(\d)(\d)(\d)(\d)([a-z])?([a-z])?([a-z])?
但这允许超过7位数字,允许超过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
您可能需要在末端使用锚点。此外,您的正则表达式可以简化为:-
^\d{7}[a-z]{0,3}$
完全匹配\d{7}
。您不需要使用7位
7 是时候了\d
创建一个范围,并匹配前面模式的0到3个重复{0,3}
与行首匹配插入符号(^)
与行尾匹配美元($)
^(\d){7}[a-z]{0,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次”