Php 基于第一个字符的条件正则表达式长度
有一个带有数字的字符串,我需要用PHP preg_match进行验证。 如果它以10或20或30开头,我需要在初始2之后再加7个数字,但在任何其他情况下,我只需要8个数字,而不关心前导字符是什么。 第一部分是简单的Php 基于第一个字符的条件正则表达式长度,php,regex,Php,Regex,有一个带有数字的字符串,我需要用PHP preg_match进行验证。 如果它以10或20或30开头,我需要在初始2之后再加7个数字,但在任何其他情况下,我只需要8个数字,而不关心前导字符是什么。 第一部分是简单的 /^(1 | 2 | 3)0\d{7}$ 但是我怎样才能添加其他部分呢?我需要一个简单的 ^\d{8}$ 我需要匹配以下示例: 101234567 201234567 12345678 33445566您可以使用 ^(?:[1-3]0\d{7}|(?![1-3]0)\d{8})$
/^(1 | 2 | 3)0\d{7}$
但是我怎样才能添加其他部分呢?我需要一个简单的
^\d{8}$
我需要匹配以下示例:
101234567
201234567
12345678
33445566您可以使用
^(?:[1-3]0\d{7}|(?![1-3]0)\d{8})$
见
详细信息
-字符串的开头^
-启动非捕获组:(?:
-[1-3]0\d{7}
,1
或2
,然后是3
和任意7位数字0
-或|
-不允许在字符串开头立即出现(?![1-3]0)\d{8}
、10
或20
,然后匹配任意8位数字30
-组结束)
-字符串的结尾$
(?(?=regex)然后| else)
aka:
它的字面意思是:如果[1-3]0
在开头正确,则匹配[1-3]0\d{7}
,否则匹配\d{8}
演示:(无耻地从Wiktor的答案中摘取例子)
^([1-3]0\d{7}\d{8})$
尝试过,但它与10123456匹配,从10开始,只有6个数字,然后^([1-3]0\d{7}(?![1-3]0)\d{8})$
太好了,这就是我需要的,谢谢你,伙计
^(?(?=[1-3]0)[1-3]0\d{7}|\d{8})$