Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi [gelöst] Unerlaubte Zeichen in String finden (https://www.delphipraxis.net/183944-%5Bgeloest%5D-unerlaubte-zeichen-string-finden.html)

Kralle 15. Feb 2015 19:39

Delphi-Version: XE7

[gelöst] Unerlaubte Zeichen in String finden
 
Moin,

ich stehe mir gerade selber im Wege.

Ich möchte Überprüfen ob andere Zeichen als
"0" ... "9";
"a" ... "z";
"A" ... "Z";
"-" (Bindestrich);
"_" (Unterstrich)
" " (Leerzeichen)

in einem String enthaltren sind.
Ich könnte jetzt zwar mittels
Delphi-Quellcode:
pos
irgendwie das zusammen stricken, aber gibt es nicht einen Wege zu prüfen ob irgendein Zeichen aus einer Liste von Zeichen in einem String vorhanden ist?

Gruß HEiko

ringli 15. Feb 2015 20:01

AW: Unerlaubte Zeichen in String finden
 
Ich glaube da könnte
Delphi-Quellcode:
CharInSet
hilfreich sein.

mm1256 15. Feb 2015 20:32

AW: Unerlaubte Zeichen in String finden
 
yupp

Delphi-Quellcode:
function HatStringSonderzeichen(Value: string): boolean;
var
  i: integer;
begin
  Result := false;
  for i := 1 to Length(Value) do
  if not CharInSet(Value[i], ['0'..'9','a'..'z','A'..'Z',' ','-','_'])
  then Exit(True);
end;

SProske 16. Feb 2015 07:52

AW: Unerlaubte Zeichen in String finden
 
Alternativ könnte man dafür auch Regular Expressions verwenden...

Unit RegularExpressions einbinden

Delphi-Quellcode:
function HatStringKeineSonderzeichen(const aString: string): Boolean;
begin
  result := TRegex.IsMatch(aString, '^[A-Za-z0-9 _\-]*$');
end;

function HatStringSonderzeichen(const aString: string): Boolean;
begin
  result := TRegex.IsMatch(aString, '[^A-Za-z0-9 _\-]');
end;
Im XE7 sollte das auch für Leerstrings funktionieren (HatStringKeineSonderzeichen matched, HatStringSonderzeichen nicht) - das müsstest wenn nötig aber testen.

In meinem XE3 will er Leerstrings absolut nicht matchen, da müsste man also ggf. eine Sonderbehandlung ergänzen.

Umgestellt wurde das wohl mit XE6 (http://www.regexguru.com/2014/05/wha...r-expressions/)

himitsu 16. Feb 2015 09:52

AW: Unerlaubte Zeichen in String finden
 
Zitat:

Ich möchte Überprüfen ob andere Zeichen als
Demnach ist dein Vorgehen und die Überschrift falsch, denn du willst nicht auf "ungültigen" Zeichen prüfen, sondern darauf, daß der String nur aus "gültigen" Zeichen besteht.
Das ist auch erstmal OK, denn deine Definition besteht nur aus den gültigen Zeichen und "alle" Ungültigen wirst du nicht kennen und sie auch nicht alle prüfen wollen.

Lösung: Prüfe jedes Zeichen, ob es gültig ist und wenn nicht.
Was ist mit einem Leerstring "ohne" irgendein Zeichen?

Wie du das prüfst ist egal ... mit Schleife drüberlaufen, RegEx oder sonstwie.

mm1256 16. Feb 2015 12:46

AW: Unerlaubte Zeichen in String finden
 
Zitat:

Zitat von himitsu (Beitrag 1290018)
Was ist mit einem Leerstring "ohne" irgendein Zeichen?

Exakt aus diesem Grund steht das "Result := false" vor der Überprüfung. Man könnte die Funktion auch auch anders nennen, dann ist es noch eindeutiger

Delphi-Quellcode:
function HatStringUnerlaubteZeichen(Value: string): boolean;
begin
  Result := false;
  ...

Kralle 16. Feb 2015 14:08

[gelöst] :AW: Unerlaubte Zeichen in String finden
 
Moin,

Zitat:

Zitat von mm1256 (Beitrag 1289972)
yupp

Delphi-Quellcode:
function HatStringSonderzeichen(Value: string): boolean;
var
  i: integer;
begin
  Result := false;
  for i := 1 to Length(Value) do
  if not CharInSet(Value[i], ['0'..'9','a'..'z','A'..'Z',' ','-','_'])
  then Exit(True);
end;

Ich habe mich für diesen Weg entschieden.
Es hat einen Moment gedauert bis mir aufging, das ich die Dateiendung incl. Punkt vorher entfernen muß :o

Danke, für Eure Hilfe.

Gruß HEiko

himitsu 16. Feb 2015 17:32

AW: Unerlaubte Zeichen in String finden
 
Zitat:

Zitat von mm1256 (Beitrag 1290052)
Zitat:

Zitat von himitsu (Beitrag 1290018)
Was ist mit einem Leerstring "ohne" irgendein Zeichen?

Exakt aus diesem Grund steht das "Result := false" vor der Überprüfung.

Was hat das damit zu tun?

Es wurde nirgendwo genannt, wie die "Definition" dafür aussieht, also was in diesem Fall gemacht wird.
Ein String ohne irgendwelche Teichen ist erlaubt, nach dieser Funktion "hat ungültige Zeichen".

Und jetzt, wo wir wissen, daß es eine Prüfung für Dateinamen werden sollte, was natürlich vorher nichtmal erwähnt wurde, dann wären zwar Dateien ohne "Dateiname", also nur mit einer Dateiendung, zwar gültig (nach dieser Funktion und auch für da Dateisysten ... siehe ".htaccess"), aber ob das wirklich so sein sollt?

Delphi-Quellcode:
Result := Value = '';
, aber dann müsste man die Funktion umbenennen, wobei ich die Funktion auch gleich umdrehen würde, indem ich sie "IsValidFilename" nennen würde, oder vielleicht auch Hier im Forum suchenIsFileName oder Hier im Forum suchenCheckFilename. :stupid:
http://www.delphipraxis.net/15428-da...t-pruefen.html
http://www.delphipraxis.net/73213-%5...ateinamen.html
[DP]Dateiname gültig[/DP] :roll:


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:33 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz