2

TEdit.textがこの形式であるかどうかを確認したい123/45/678テキストが入力されたとき###/## / ###

これを行う簡単な方法はありますか?ありがとう

4

3 に答える 3

2

マスクが非常に単純で、#および/だけであると仮定すると、テスト関数を作成するのは簡単です。

function MatchesMask(const Text, Mask: string): Boolean;
var
  i: Integer;
begin
  Result := False;

  if Length(Text)<>Length(Mask) then
    exit;

  for i := 1 to Length(Text) do
    case Mask[i] of
    '#':
      if (Text[i]<'0') or (Text[i]>'9') then
        exit;
    else
      if Text[i]<>Mask[i] then
        exit;
    end;

  Result := True;
end;
于 2013-02-12T08:09:03.937 に答える
2
Function CheckStringWithMask(const Str,Mask:String):Boolean;
var
 i:Integer;
begin
  Result := true;
  if length(str)=length(Mask) then
    begin
    i := 0;
    While Result and  (I < Length(Str)) do
      begin
      inc(i);
      Result := Result and (Str[i] <> '#')
                and ((Mask[i] ='#') and (CharInSet(Str[i],['0'..'9']))
                or (Str[i]=Mask[i]));
      end;
    end
  else Result := false;
end;
于 2013-02-12T08:09:19.837 に答える
2

@David Heffernanの提案のバリエーション:

function MatchesMask(const Text, Mask: string): Boolean;
var
  i: Integer;
begin
  Result := (Length(Text) = Length(Mask));

  if not Result then Exit;

  i := 0;
  while Result and (i < Length(Text)) do begin
    Inc(i);
    case Mask[i] of
    '#':
       Result := (Text[i] >= '0') and (Text[i] <= '9');
    else
       Result := (Text[i] = Mask[i]);
    end;
  end;    
end;
于 2013-02-12T09:21:22.423 に答える