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 回答