3

私は正規表現を初めて使用し、データベース内のレシート番号を正規表現で検証しようとしています。

領収書は次の形式で提供されます。

  • 0123456(必須の7桁、それ以上でもそれ以下でもない)
  • 0126456a(1文字のazを含む必須の7桁の数字)
  • 0126456ab(2文字のazを含む必須の7桁の数字)
  • 0126456abc(3文字のazを含む必須の7桁の数字)

さまざまな正規表現の組み合わせを使用してみましたが、どれも機能しないようです。今私は持っています:

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

しかし、これは7桁以上を許可し、3文字以上を許可します。

式を検証するAccess2010内の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
4

3 に答える 3

10

おそらく、両端にアンカーを使用する必要があります。さらに、正規表現は次のように簡略化できます。-

^\d{7}[a-z]{0,3}$
  • \d{7}完全に一致します7 digits\dそのために7回使用する必要はありません。
  • {0,3}範囲を作成し、前のパターンの0〜3回の繰り返しに一致します。
  • Caret(^)行の先頭に一致します
  • Dollar($)行の終わりに一致します。
于 2013-02-09T21:59:35.773 に答える
6

^(\d){7}[a-z]{0,3}$うまくいくかもしれません。^およびは、それぞれ行の$開始と終了に一致します。

于 2013-02-09T22:01:44.880 に答える
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回」を意味します。

于 2013-02-09T22:05:02.820 に答える