日付が有効か否かを検証するには?

解決


amide  2004-08-03 19:57:12  No: 10195

ユーザーに日付の入力を求めて、それが有効でない日付のときはエラーを回避するため現在の日付を返すようにしています。

var S:string;
    D:TDate;

S:=inputbox('','日付を ****/**/** の書式で入力してください','');
if S='' then exit;
D:=StrtoDatedef(S,Date);

ユーザーが有効でない日付を入力したとき、再入力を求めたいのですが、
入力された日付が有効か否かを検証するにはどうすればいいのですか?


TtPIPICH  URL  2004-08-03 22:56:22  No: 10196

まず、「/」で区切って(ansipos+LeftStr/RightStr)
それぞれをStrToIntDef(デフォルトは-1)で数値にし、
範囲内かどうかを調べる


TtPIPICH  2004-08-03 23:01:39  No: 10197

間違えました
デフォルトで指定した日付が返ってきたら入力した値は無効です

まず、適当な日付と比較し、
同じでなければ、
StrToIntDef(入力した値,さきほどの日付)
として、
さきほどの値なら再入力を求めて下さい


にしの  2004-08-03 23:12:51  No: 10198

わざわざ'/'で切らなくても、try...exceptでできるかと。

function StrToDateValidate(const S: String; var D: TDate): Boolean;
begin
  try
    D := StrToDate(S);
    Result := True;
  except
    Result := False;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  S:string;
  D:TDate;
  IsDate: Boolean;
begin
  IsDate := False;
  while not IsDate do
  begin
    S:=inputbox('','日付を ****/**/** の書式で入力してください','');
    if S='' then exit;
    IsDate := StrToDateValidate(S, D);
  end;
  ShowMessage(DateToStr(D));

end;


amide  2004-08-04 02:32:09  No: 10199

よくわかりました。
ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加