Sprawdzenie poprawności daty w Stringu

0

WItam,

mam stringa i musze sprawdzic czy jest on zapisany w formacie rok.miesiac.dzien czyli np. 1999.10.21, jesli tak to True, jesli nie to False.
Moglbym to zrobic bawiac sie funkcja Pos itd, ale mzoe da sie jakos ladniej i lepiej?
Prosze o propozycje.

0

Najprosciej? Wyrażeniem regularnym.

1

cos slyszalem, nigdy nie bylo mi dane uzywanie,

pracuje na d7 czy jest tam takie cos standardowo?

0
type part=(dpY,dpM,dpD);
var tb:array[part]of Integer;
var I:Integer;
var p:part;
p:=low(part);
for I:=1 to Length(Str) do
begin
   if IsDigit(Str[i]) then tb[p]:=tb[part]*10+Ord(Str[i])-Ord('0')
   else if Str[i]='.' then
   begin
     p:=succ(p);
     if p>dpD then ERROR;
   end
   else ERROR;
end;
//A tu sprawdzamy wartości w tb[] czy miesiąc jest 1..12, czy dzień jest 1..28,1..29,1..30,1..31 w zależności od miesiąca i roku.
0

Najprościej to podziel sobie ten łańcuch na trzy części - wykorzystaj do tego celu procedurę ExtractStrings, po czy sprawdź funkcją EncodeDateTime czy podane liczby (po konwersji) dadzą poprawną datę;

Najprościej, bo dzięki temu sprawdzone zostanie czy faktycznie to data, czy dany dzień istnieje w podanym miesiącu i roku itd.;

0

Ok, z tym, że tutaj najpierw musimy sprawdzic, czy to co jest w stringu to nie "Ala ma kota" ale cos datopodobnego, a potem mozna probowac rozdzielac kropkami na podstringi - dobrze mysle?

2

Właściwie to można tak:
DateSeparator:='.';
ShortDateFromat:='YYYY.MM.DD';
if Str=DateToStr(StrToDate(Str)) then ...

0

OK, powyzszy sposob wydaje sie najlepszy, z tym, ze trzeba dodac try except bo strtodate lubi sypac wyjatkami,
dzieki za pomoc.

0
alltravelel napisał(a):

cos slyszalem, nigdy nie bylo mi dane uzywanie,

pracuje na d7 czy jest tam takie cos standardowo?

Standardowo w D7 nie ma nic do obsługi wyrażeń regularnych, ale polecam moduł z: http://regexpstudio.com/TRegExpr/TRegExpr.html - w archiwum dołaczona jest dokumentacja i przykłady. Więcej o wyrażeniach reglarnych znajdziesz na mnóstwie stron do wyszukania w google.

1 użytkowników online, w tym zalogowanych: 0, gości: 1