Вы можете сделать негативный взгляд на шаблоны, которые вы не хотите сопоставлять, и использовать это регулярное выражение,
^(?!\d{4}-\d{10})(?!\d{10}-\d{4})\d{4}-?\d{6}-?\d{4}$
Объяснение:
^
-> Начало строки (?!\d{4}-\d{10})
-> Отрицательный прогноз, чтобы избежать сопоставления с этим шаблоном (?!\d{10}-\d{4})
-> Отрицательный просмотр, чтобы избежать сопоставления с этим шаблоном \d{4}-?\d{6}-?\d{4}
-> Соответствует шаблону, как вы хотели $
-> Конец строки
Демо
Другой шаблон, который я могу придумать, более простой и элегантный, вы можете использовать это,
^\d{4}(-?)\d{6}\1\d{4}$
Объяснение:
^
-> Начало строки \d{4}
-> Соответствует ровно четырем цифрам (-?)
-> Соответствует необязательному дефису и захватывает в группе 1 \d{6}
-> соответствует ровно шести цифрам \1
-> Это гарантирует, что оба дефиса либо присутствуют, либо отсутствуют, как указано в регулярном выражении \d{4}
-> соответствияровно четыре цифры $
-> Конец строки
Демо