ОК, регулярное выражение, которое будет проверять месячные и дневные диапазоны, может быть
[0-9]{4}-(?:1[0-2]|[1-9])-(?:3[01]|[12][0-9]|[1-9])
Если вы хотите ограничить годы, скажем, с 1900 по 2050 год, вы можете получить
(?:2050|20[0-4][0-9]|19[0-9]{2})-(?:1[0-2]|[1-9])-(?:3[01]|[12][0-9]|[1-9])
Они не будут отлавливать «слегка неправильные» даты, такие как 31 февраля, поэтому на самом деле совершенно ясно, что проверку работоспособности необходимо выполнять вне регулярного выражения.