1

我有一个字符串未能通过以下要求:-

$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 可以通过检查?

4

2 回答 2

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检查 c 或 p 作为第一个字母。

于 2012-05-03T07:14:18.027 回答
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 匹配模式,如果它是......

  • “p”,小写字母或数字的两倍,后跟
  • 一个数字 1-6,另一个字母,两个数字,“e”或“school”或“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都会以ac开头吗?也许你的意思是这个,它会匹配“ca11a15e”(注意 c 而不是 p):

return (preg_match('/^c[a-z\d]{2}([1-6][a-z]\d{2}e|school|master|ee01)$/',$uid);
于 2012-05-03T07:20:20.040 回答