我有一个字符串无法通过以下要求:-
$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能够通过检查?
简答
您的 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
检查 c 或 p 作为第一个字母。
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 匹配模式,如果它是...
- "p",两次小写字母或数字,后跟
- 一个数字 1-6,另一个字母,两个数字,"e"或"学校"或"master"或"ee01">
例如,这将匹配:"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);