我有两个序列号格式,如果其中任何一个匹配,我想将页面重定向到指定的URL。下面是我的代码,它有2个regexes ORed,后面是一个ORed条件语句,它使用来自regexes的组:
$snregex = "/^(FL3)20([0-9]{2})([0-9]{2})([0-9]{5})$|^S[XNS][42][10][0]-([0-9]{2})([0-9]{2})([0-9]{2})-[0-9]{4}$/";
if (preg_match($snregex, $sn, $matches)) {
$mm = $matches[1];
$yr = $matches[2];
$wk = $matches[3];
# If SN MM codes are 25 or FL3 then use host server
if ($matches[1] == 'FL3' || $matches[1] == '25') {
$url = "http://192.168.10.115/logs/20" . $yr . "/" . $wk . "/" . $sn . "/";
# Redirect to host server
redirect($url, '303');代码只适用于我在preg_match条件语句中首先输入的正则表达式,也就是说,如果FL3正则表达式是第一个,那么我可以成功地匹配序列号,而不能匹配另一个。同样,如果我首先将该语句更改为“25”序列号,我可以成功地匹配该序列号,但不匹配另一个序列号。下列情况是否有问题:
$snregex = "/^(FL3)20([0-9]{2})([0-9]{2})([0-9]{5})$|^S[XNS][42][10][0]-([0-9]{2})([0-9]{2})([0-9]{2})-[0-9]{4}$/";示例有效序列号是:
FL320150500022
SS210 210-251509-0098
发布于 2015-06-30 16:08:48
您应该使用var_dump($matches);然后您将看到^(a)$|^(b)$结果为两个组,而不是包含'a‘或'b’的1组。这意味着您应该将if-语句更新为类似于if ($matches[1] == 'FL3' || $matches[5] == '25')的语句。
显然,我不知道您的其余代码;但是我不会像这样混合多个regexp;相反,我会将它分成两个独立的if-语句:
if (preg_match(FL...))
$url = '...';
elseif (preg_match(25))
$url = '...';https://stackoverflow.com/questions/31143023
复制相似问题