Будет эта работа:
^(?=[A-Z0-9]{10,})\d*[A-Z]\d*[A-Z]\d*$
^
- совпадение начала строки (?=[A-Z0-9]{10,})
- положительный LookAhead, чтобы соответствовать как минимум 10 символов из [A-Z0-9]
только \d*[A-Z]\d*[A-Z]\d*
- два символа в диапазоне [A-Z]
, окруженные нулем или более цифрами $
- совпадение конца строки
В качестве альтернативы, создайте еще одну группу захвата:
^(?=[A-Z0-9]{10,})(\d*[A-Z]){2}\d*$
Теперь у вас есть немного больше гибкости, чтобы указать шаблону, что вам нужно количество букв в верхнем регистре x> {x}