2012-05-03 4 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 генерируется системой, со следующим правилом кал = школа 1а = класс студента 15 = число классов студент е = курс поступил – 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 соответствует шаблону, если он ...

  • "р", два раза либо строчная буква или цифру, а затем
  • одной цифры 1-6, другая буква, две цифры, "е" или "школа" или "мастер" или "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 собирается начать с с? Возможно, вы имели в виду это, что соответствовало бы «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), поэтому что первые 2 символа могут быть любой буквой? или я изменю ее на (preg_match ('/^pc [az \ d] {2} ([1-6] [az] \ d {2} e | школа | master | ee01) $/', $ uid), чтобы он мог обслуживать как c, так и p? – Ham

+0

Чтобы разрешить либо p, либо c, вам нужно поместить их в группу типа [cp]. Только cp будет соответствовать только если были и с, и р. – Armatus

4

Короткий ответ

Ваш UID не начинается с 'р'. Все правила проверяют, что он начинается с «p».

Длинный ответ

$match1 = preg_match('/^p[a-z\d][a-z\d][1-6][a-z]\d{2}e$/',$uid); 

Это проверка на что-то в формате: букву р, строчной буквы, 1 значного числа, буквы в нижнем регистре, 1 значное число, число от 1 до 6, нижний регистр буквы, цифры (1 или 2 цифры), буква х

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

Это проверка на тот формат: буквы р, строчную букву, 1 значного число, строчную букву, 1 г ИГИТ число, слово «школа»

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

Это проверка на что-то в формате: буква р, строчной буквы, 1 значного числа, буквы в нижнем регистре, 1 значное число, слово «мастер»

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

Это проверка на что-то в формате: буква р, строчной буквы, 1 значного числа, буквы в нижнем регистре, 1 значное число, строка '' ee01

EDIT

Если вы хотите добавить «с» в разрешенных символов в начале согласования, вы можете, например, сделать:

$match1 = preg_match('/^[cp][a-z\d][a-z\d][1-6][a-z]\d{2}e$/',$uid); 

[cp] вместо p проверяет C- или р, что и первое письмо.

Смежные вопросы