Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式,7位数字后跟可选的3个字母_Regex_Vba_Ms Access - Fatal编程技术网

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位
    。您不需要使用
    \d
    7 是时候了
  • {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次”