I have a string that is failing to pass the below requirement:-
$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;
}
Actually, what is the phase talking about? and how shall I modify it so that the $uid can pass the checking?
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 matches the pattern if it is...
For example, this would match: "p6t3h56e" (first pattern), or "p9hschool" (second).
"ca11a15e" will not match any of these because they all require a "p" at the start.
By the way, this can be shortened to:
return (preg_match('/^p[a-z\d]{2}([1-6][a-z]\d{2}e|school|master|ee01)$/',$uid);
Are all the uid's going to start with a c? Maybe you meant this, which would match "ca11a15e" (Note the c instead of p):
return (preg_match('/^c[a-z\d]{2}([1-6][a-z]\d{2}e|school|master|ee01)$/',$uid);
Short answer
Your uid does not begin with a 'p'. All rules are checking that it begins with 'p'.
Long answer
$match1 = preg_match('/^p[a-z\d][a-z\d][1-6][a-z]\d{2}e$/',$uid);
This is checking for something of the format: the letter p, lowercase letter, 1 digit number, lowercase letter, 1 digit number, number from 1 to 6, lowercase letter, number (1 or 2 digits), the letter e
$match2 = preg_match('/^p[a-z\d][a-z\d]school$/',$uid);
This is checking for something of the format: the letter p, lowercase letter, 1 digit number, lowercase letter, 1 digit number, the word 'school'
$match3 = preg_match('/^p[a-z\d][a-z\d]master$/',$uid);
This is checking for something of the format: the letter p, lowercase letter, 1 digit number, lowercase letter, 1 digit number, the word 'master'
$match4 = preg_match('/^p[a-z\d][a-z\d]ee01$/',$uid);
This is checking for something of the format: the letter p, lowercase letter, 1 digit number, lowercase letter, 1 digit number, the string 'ee01'
EDIT
If you wish to add 'c' to the allowed characters at the start of the matching, you can, for example do:
$match1 = preg_match('/^[cp][a-z\d][a-z\d][1-6][a-z]\d{2}e$/',$uid);
[cp]
instead of p
checks for EITHER c or p as the first letter.