0

首先,我是正则表达式的 N00b,它就像一种新语言,我在 ATM 上苦苦挣扎并寻找方向。

我有一个包含序列号字段的表单,但字段内容可以是 3 个可能的规则之一。

规则 1:长度始终为 13 位置 1 始终为 C 位置 2-5 是数字 位置 6 是字母 位置 7-13 是数字

规则 2:长度为 8 或 9 位置 1-2 是字母 位置 3-8 是数字 位置 9 是字母

Rule3 : 长度为 9 位置 1-9 为数字

我的问题:这个公式是否可以在正则表达式中实现 - 以及子问题:我可以查看的指针或我可以破译的表达式?

抱歉,如果这太不合时宜了——RegEx 让我很头疼:)

4

1 回答 1

2

试一试:

/^(C\d{4}[a-zA-Z]\d{7}|[a-zA-Z]{2}\d{6}[a-zA-Z]?|\d{9})$/

我想最后一个 alpha 在规则 #2 中是可选的

解释:

The regular expression:

(?-imsx:^(C\d{4}[a-zA-Z]\d{7}|[a-zA-Z]{2}\d{6}[a-zA-Z]?|\d{9})$)

matches as follows:

NODE                     EXPLANATION
----------------------------------------------------------------------
(?-imsx:                 group, but do not capture (case-sensitive)
                         (with ^ and $ matching normally) (with . not
                         matching \n) (matching whitespace and #
                         normally):
----------------------------------------------------------------------
  ^                        the beginning of the string
----------------------------------------------------------------------
  (                        group and capture to \1:
----------------------------------------------------------------------
    C                        'C'
----------------------------------------------------------------------
    \d{4}                    digits (0-9) (4 times)
----------------------------------------------------------------------
    [a-zA-Z]                 any character of: 'a' to 'z', 'A' to 'Z'
----------------------------------------------------------------------
    \d{7}                    digits (0-9) (7 times)
----------------------------------------------------------------------
   |                        OR
----------------------------------------------------------------------
    [a-zA-Z]{2}              any character of: 'a' to 'z', 'A' to 'Z'
                             (2 times)
----------------------------------------------------------------------
    \d{6}                    digits (0-9) (6 times)
----------------------------------------------------------------------
    [a-zA-Z]?                any character of: 'a' to 'z', 'A' to 'Z'
                             (optional (matching the most amount
                             possible))
----------------------------------------------------------------------
   |                        OR
----------------------------------------------------------------------
    \d{9}                    digits (0-9) (9 times)
----------------------------------------------------------------------
  )                        end of \1
----------------------------------------------------------------------
  $                        before an optional \n, and the end of the
                           string
----------------------------------------------------------------------
)                        end of grouping
----------------------------------------------------------------------
于 2013-01-19T10:44:11.660 回答