2012-05-03 99 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作爲第一封信。