Вам не нужно решать каждую задачу с помощью регулярного выражения, вы можете легко проверить это с помощью кода. Все, кроме номера 5, просты, поэтому вы можете использовать:
^[A-Z]{2}[ \-][0-9]{2}[ ,][A-Z0-9]{2,3}[ \-][0-9]{4}$
затем проверьте символы 7 и 8 (и 9, если общая длина 14, а не 13) для условия номер 5. А также проверьте, что позиции 3 и 7 идентичны.
Код, необходимый для проверки этого старого стиля, вероятно, будет гораздо более читабельным (и поддерживаемым), чем регулярное выражение, чтобы делать то же самое.
При повторном чтении вопроса в условиях 5 и 6 возникает путаница. Условие 5 звучит так: любой из двух или трех символов может быть альфа, тогда как во втором примере указано последний должен быть альфа.
Условие 6 Использование слова аналогично означает, что условие аналогично, тогда как в первом примере указано, что символы должны быть идентичны .
Если примеры верны, вы можете использовать:
^[A-Z]{2}([ \-])[0-9]{2}[ ,][A-Z0-9]{1,2}[A-Z]\1[0-9]{4}$
(корректировка, если вам также нужен нижний регистр), но я все еще поддерживаю, что хорошо продуманный код без регулярных выражений более удобен в обслуживании.