2012-05-03 94 views
1

我有一个未能通过如下要求的字符串: -PHP + JavaScript字符串检查

$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

$ uid的值应该在引号内吗?这是一个错字或你的程序是如何? – LeonardChallis

+0

$ uid由系统生成,具有以下规则 cal =学校 1a =学生的班级 15 =学生的班级编号 e =已注册的课程 – Ham

+0

这与JavaScript有关吗? – hakre

回答

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); 
+0

我可以将它改为(preg_match('/^[az \ d] {2}([1-6] [az] \ d {2} e | school | master | ee01)$ /',$ uid)so前2个字符可以是任何字母?或者我将它改为(preg_match('/^pc [az \ d] {2}([1-6] [az] \ d {2} e | school | master | ee01)$ /',$ uid),这样它可以同时满足c和p? – Ham

+0

要允许p或c,你需要把它们放在一个类似[cp]的组中。都是c和p。 – Armatus

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 d igit数字,单词“学校”

$match3 = preg_match('/^p[a-z\d][a-z\d]master$/',$uid); 

这是检查格式的东西: 字母P,小写字母,1位数字,小写字母,1位数字,单词“主人”

$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作为第一封信。