Это:
^((0[1-9])|([1-9]{2}))((0[1-9]|1[0-2]))(0[1-9]|[1-2][0-9]|(?<!(?:(0[2469])|11))31|(?<!02)30)\d{5}$
близко к тому, что вы ищете. Формат должен быть в порядке, но он также принимает некоторые недопустимые даты, такие как 192901
Это также причина, почему вы хотите избежать использования регулярных выражений для таких задач. Если вы используете это для чего-то сложного. Предполагая, что ваше регулярное выражение поддерживает рекурсию, вы можете использовать некоторые трюки по модулю для проверки високосных лет, но опять-таки, я действительно действительно советую вам не делать этого, если нет конкретной причины c или служит для развлекательных целей (например, какая-то задача программирования)