有一个带有数字的字符串,我需要用 PHP preg_match 进行验证。 如果它以 10、20 或 30 开头,则在最初的 7 个数字之后还需要 2 个数字,但在任何其他情况下,我只需要 8 个数字,并且不在乎主角是什么。 第一部分是简单的/^(1|2|3)0d{7}$
但是如何添加 ELSE 部分?在那里我需要一个简单的
^d{8}$
我需要匹配这些示例:
101234567
201234567
12345678
33445566
您可以使用
^(?:[1-3]0d{7}|(?![1-3]0)d{8})$
查看正则表达式演示
详
^
- 字符串的开头(?:
- 非捕获组的开始:[1-3]0d{7}
-1
、2
或3
,然后0
和任意7位数字|
- 或(?![1-3]0)d{8}
- 不允许在字符串开头立即10
、20
或30
,然后匹配任意 8 位数字
)
- 组结束$
- 字符串的结尾。
以下是使用(?(?=regex)then|else)
aka条件的替代方法:
^(?(?=[1-3]0)[1-3]0d{7}|d{8})$
它的字面意思是:如果[1-3]0
在开始时是正确的,则匹配[1-3]0d{7}
,否则匹配d{8}
。
演示:https://regex101.com/r/LXoHyk/1(例子无耻地取自维克托的答案(