Если вы обнаружите, что регулярное выражение станет слишком сложным и неосновным, используйте вместо этого код. Регулярные выражения могут быть очень сложными даже для вещей, которые на первый взгляд кажутся очень простыми. Например, проверка дат в формате мм / дд / гг [гг] так же «проста», как:
^(((((((0?[13578])|(1[02]))[\.\-/]?((0?[1-9])|([12]\d)|(3[01])))|(((0?[469])|(11))[\.\-/]?((0?[1-9])|([12]\d)|(30)))|((0?2)[\.\-/]?((0?[1-9])|(1\d)|(2[0-8]))))[\.\-/]?(((19)|(20))?([\d][\d]))))|((0?2)[\.\-/]?(29)[\.\-/]?(((19)|(20))?(([02468][048])|([13579][26])))))$
Никто не может этого поддержать. Для анализа даты вручную потребуется больше кода, но он может быть гораздо более читабельным и обслуживаемым.
Регулярные выражения очень эффективны и полезны для сопоставления TEXT шаблонов, но плохо подходят для проверки с числовыми частями, такими как даты.