Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.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
preg_match-PHP:如何检查列表中的前两位数字_Php_Regex_Preg Match - Fatal编程技术网

preg_match-PHP:如何检查列表中的前两位数字

preg_match-PHP:如何检查列表中的前两位数字,php,regex,preg-match,Php,Regex,Preg Match,我的模式: 以下码码码::((((01124周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日

我的模式: 以下码码码::((((01124周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日周日|33)(\d{7}))]{9}|(\d{12}))$

在下面的图片下面的图片下面的图片中,<代码>919191<代码>是在名单中的不名单<代码>0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 7 7 7 7 7 7 7 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 29 | 15 | 17 | 33但它仍然返回

我怎样才能纠正它

整个正则表达式说:“从0-9中的任何字符、括号、大括号或管道字符中查找9个,或者查找12位”

这样看来,你做错了什么就相当明显了

请尝试使用以下正则表达式:

^(?:(?:01|02|35|.....|33)\d{10}|\d{12})$

您已经将正则表达式的整个第一部分放在字符类中(方括号,介于
[
]
之间的所有内容)。您不需要/想要字符类,因为现在您只需要匹配长度(所有数字都包含在您的字符类中)

因此,您可能可以使用(未经测试):


这应该返回所有12个字符的数字(第二部分)或所有9个字符的数字,以提供的序列开头。如果这是您需要的…

仅检查前两个字符,我不会使用正则表达式:

$valid = ['01', '02', '35', '27', '09', '38', ...];

if (in_array(substr($str, 0, 2), $valid)) {
    // continue validation here
}

多亏了Kollink,我终于建立了一个对我来说非常有效的模式:


以下码码码:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::12400 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0|33)\d{7}\d{12}$

由于您的备选方案中有从01到38的所有数字,您可以使用以下选项:

^(?:(?:0[1-9]|[12]\d|3[0-8])\d{7}|\d{12})$

但它会返回两位数的结果在谷歌搜索后,我发现
(?:)
是非捕获组,但你能给我更多关于它的详细信息吗?
^(?:(?:0[1-9]|[12]\d|3[0-8])\d{7}|\d{12})$