Registriert seit: 15. Mär 2007
4.116 Beiträge
Delphi 12 Athens
|
AW: Regex Erläuterungen
19. Dez 2024, 09:18
Du könntest nach einem fehlgeschlagenem RegEx noch die Abschnitte einzeln prüfen.
In etwa so (ungetestet):
Delphi-Quellcode:
function ValidateInputByPosition(Input: string): string;
var
Match: TMatch;
Errors: TStringList;
LengthPart: Integer;
begin
Errors := TStringList.Create;
try
// Vollständige Musterprüfung
if not TRegEx.IsMatch(Input, '^([A-Z]{2}\d{2}[A-Za-z0-9]{11,30})$') then
begin
// Abschnitt 1: Zwei Großbuchstaben
if not TRegEx.IsMatch(Input, '^[A-Z]{2}') then
Errors.Add('Die Eingabe muss mit zwei Großbuchstaben beginnen (z. B. ''AA'').');
// Abschnitt 2: Zwei Ziffern
if not TRegEx.IsMatch(Input, '^[A-Z]{2}\d{2}') then
Errors.Add('Nach den Großbuchstaben müssen zwei Ziffern folgen (z. B. ''11'').');
// Abschnitt 3: Länge des letzten Teils
LengthPart := Length(Copy(Input, 5, MaxInt));
if LengthPart < 11 then
Errors.Add(Format('Der letzte Teil muss mindestens 11 Zeichen lang sein, aber es sind nur %d Zeichen.', [LengthPart]))
else if LengthPart > 30 then
Errors.Add(Format('Der letzte Teil darf maximal 30 Zeichen lang sein, aber es sind %d Zeichen.', [LengthPart]));
end;
// Rückgabe
if Errors.Count = 0 then
Result := 'Die Eingabe ist gültig.'
else
Result := Errors.Text;
finally
Errors.Free;
end;
end;
// Testaufruf
procedure TestValidationByPosition;
var
Inputs: array[0..3] of string = ('AA11abcdefghijkl', 'AA11abcdefghij', 'Ax11abcdefghijkl', 'AA11abcdefghijklmnopqrstu');
I: Integer;
begin
for I := Low(Inputs) to High(Inputs) do
Writeln(Format('Eingabe: %s', [Inputs[I]]), #13#10, ValidateInputByPosition(Inputs[I]));
end;
|
|
Zitat
|