我有一个正则表达式:
/^ETW([0-9C])([0-9])([0-9])([0-9])([0-9])([A-L])([0-9])([0-9])([0-9])/g
符合以下条件:
所有这些条件都符合我的RegEx,但现在又出现了另一个问题,Character 12
只能来自Equal to
Character 10
+1 only
或Character 10
}
我怎样才能实现这一目标?我已经尝试了条件RegEx,但它没有用,任何人都可以帮我解决这个问题吗? 我是否必须务实地处理它我很抱歉我对RegEx条件处理真的很新,任何帮助材料也会有用。
答案 0 :(得分:2)
一种方法是将其拆分为两个单独的匹配操作,使用第一个匹配操作创建第二个匹配操作。
function isValidFormat($str)
{
$pt1 = substr($str,0,10);
$r1 = '#^ETW(\d|C)(\d)(\d)(\d)(\d)([A-L])(\d)#';
//If you're not going to use all the match groups, use
//$r1 = '#^ETW(\d|C)\d{4}[A-L](\d)#';
//And instead of $matches[7], use $matches[2]
if(preg_match($r1,$pt1,$matches)>0)
{
$pt2 = substr($str,10);
$pt10 = intval($matches[7]);
$pt12M = $pt10==9 ? '9' : '('.$pt10.'|'.($pt10+1).')$';
$r2 = '#\d'.$pt12M.'$#';
return preg_match($r2,$pt2)>0;
}
else return false;
}
$isValid = isValidFormat('ETW09876D929');
var_dump($isValid);
您访问this link并点击run / F9进行测试