Как проверить серийный номер по такой маске?
надо проверять серийные номера по маске такого вида (XXAAAAAXAA, NXXAAXZXXX).
Где
N – цифра от 0 до 9,
A – прописная буква латинского алфавита,
a – строчная буква латинского алфавита,
X – прописная буква латинского алфавита либо цифра от 0 до 9,
Z –символ из списка: “-“, “_”, “@”.
Как проверить значение по таким маскам?
Ответы (2 шт):
Автор решения: MyZik
→ Ссылка
XXAAAAAXAA:
Regex: /^[A-Z0-9]{2}[A-Z]{5}[A-Z0-9]{1}[A-Z]{2}$/gu
Тест на regex101
NXXAAXZXXX:
Regex: /^\d{1}[A-Z0-9]{2}[A-Z]{2}[A-Z0-9]{1}[\-_\@][A-Z0-9]{3}$/gu
Тест на regex101
Автор решения: Lexa Berezin
→ Ссылка
function checkSerialMask($serial, $mask) {
if (strlen($serial) != strlen($mask))
return false;
$regx = array(
"N" => "[0-9]",
"A" => "[A-Z]",
"a" => "[a-z]",
"X" => "[A-Z0-9]",
"Z" => "[-|_|@]"
);
//make chars array from mask
$maskChars = str_split($mask);
//generating target regex
$outputRegex = "/^";
foreach ($maskChars as $char) {
$outputRegex .= $regx[$char];
}
$outputRegex .= "/";
return (preg_match($outputRegex, $serial) > 0 ? true: false);