Это должно быть так:
/^[a-z][a-z0-9]{4} ?[a-z0-9]{5} ?[a-z0-9]{3}[0-9][!&@?]$/i
Не стесняйтесь менять 0-9 и [0-9] на \d
, если считаете нужным.
Регулярное выражение достаточно просто и достаточно читабельно. ^
и $
убедитесь, что это полное совпадение, чтобы не было лишних символов до или после кода, а флаг /i
допускает использование букв верхнего и нижнего регистра.