我有一个未能通过以下要求的字符串: -
$uid = ca11a15e (the value called from database)
function _checkSn($uid)
{
$match1 = preg_match('/^p[a-z\d][a-z\d][1-6][a-z]\d{2}e$/',$uid);
$match2 = preg_match('/^p[a-z\d][a-z\d]school$/',$uid);
$match3 = preg_match('/^p[a-z\d][a-z\d]master$/',$uid);
$match4 = preg_match('/^p[a-z\d][a-z\d]ee01$/',$uid);
$doesMatch = ($match1 || $match2 || $match3 || $match4);
return $doesMatch;
}
实际上,谈论的是什么阶段?以及如何修改它以便$ uid可以通过检查?
答案 0 :(得分:4)
简短回答
你的uid不以'p'开头。所有规则都在检查它是否以'p'开头。
答案很长
$match1 = preg_match('/^p[a-z\d][a-z\d][1-6][a-z]\d{2}e$/',$uid);
这是检查格式的东西: 字母p,小写字母,1位数字,小写字母,1位数字,1到6之间的数字,小写字母,数字(1或2位数字),字母e
$match2 = preg_match('/^p[a-z\d][a-z\d]school$/',$uid);
这是检查格式的东西: 字母p,小写字母,1位数字,小写字母,1位数字,“学校”一词
$match3 = preg_match('/^p[a-z\d][a-z\d]master$/',$uid);
这是检查格式的东西: 字母p,小写字母,1位数字,小写字母,1位数字,单词“master”
$match4 = preg_match('/^p[a-z\d][a-z\d]ee01$/',$uid);
这是检查格式的东西: 字母p,小写字母,1位数字,小写字母,1位数字,字符串'ee01'
修改强>
如果您希望在匹配开始时将“c”添加到允许的字符,您可以执行以下操作:
$match1 = preg_match('/^[cp][a-z\d][a-z\d][1-6][a-z]\d{2}e$/',$uid);
[cp]
代替p
检查EITHER c或p作为第一个字母。
答案 1 :(得分:0)
return (preg_match('/^p[a-z\d][a-z\d][1-6][a-z]\d{2}e$/',$uid)
|| preg_match('/^p[a-z\d][a-z\d]school$/',$uid)
|| preg_match('/^p[a-z\d][a-z\d]master$/',$uid)
|| preg_match('/^p[a-z\d][a-z\d]ee01$/',$uid));
uid匹配模式,如果是......
例如,这将匹配:“p6t3h56e”(第一个模式)或“p9hschool”(第二个)。
“ca11a15e”将不会与这些中的任何一个匹配,因为它们在开始时都需要“p”。
顺便说一下,这可以缩短为:
return (preg_match('/^p[a-z\d]{2}([1-6][a-z]\d{2}e|school|master|ee01)$/',$uid);
所有的uid都是以c开头吗?也许你的意思是这个,它匹配“ca11a15e”(注意c而不是p):
return (preg_match('/^c[a-z\d]{2}([1-6][a-z]\d{2}e|school|master|ee01)$/',$uid);