php + javascript字符串检查

时间:2012-05-03 07:06:34

标签: php regex

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

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

2 个答案:

答案 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匹配模式,如果是......

  • “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都是以c开头吗?也许你的意思是这个,它匹配“ca11a15e”(注意c而不是p):

return (preg_match('/^c[a-z\d]{2}([1-6][a-z]\d{2}e|school|master|ee01)$/',$uid);