PHP + JavaScript 字符串检查


php + javascript string checking

我有一个字符串无法通过以下要求:-

$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);