Попытка сделать то же самое и наткнулась на этот старый поток. Я закончил тем, что написал свою собственную функцию и думал, что я отправлю это. Как насчет этого?
function IsValidDate(const S: string): boolean;
var TestDate : tdatetime;
begin
Result := False;
if (LastDelimiter('/',S) >= 4)
and
(Length(S)-LastDelimiter('/',S) >= 4)
then
Result := TryStrToDate(S,TestDate);
end;
Во-первых, я проверяю, находится ли второй разделитель (/) по крайней мере достаточно далеко, чтобы представлять как день, так и месяц (4-я позиция). Затем я навязываю им 4-значный год с помощью следующей строки. Измените этот второй тест на> = 2 для двухзначного числа, но я просто считаю, что форсировать четырехзначный год не так уж и плохо - это всего лишь два удара.
Наконец, я тестирую с помощью TryStrToDate (). Если есть только один разделитель или недопустимая дата, он будет обнаружен здесь.
Если вы хотите получить фантазию, вы можете проверить, был ли год в течение последних 10 лет или около того. Просто добавьте:
Result := Result and (Now - TestDate < 3650);
Dave