Я мог бы на самом деле использовать простой шаблон регулярных выражений с отрицательным предвкушением, чтобы избежать появления повторяющихся букв / цифр:
^(?!.*(?:[A-Z]{2,}|[0-9]{2,}))[A-Z0-9]+$
Демо
Причина, по которой я выбрал этот подход, а не обходной, заключается в том, что мы априори не знаем, будет ли ввод начинаться или заканчиваться цифрой или буквой. На самом деле существует четыре возможных комбинации начала / конца, и это может привести к грязному образцу.