AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi [gelöst] Unerlaubte Zeichen in String finden
Thema durchsuchen
Ansicht
Themen-Optionen

[gelöst] Unerlaubte Zeichen in String finden

Ein Thema von Kralle · begonnen am 15. Feb 2015 · letzter Beitrag vom 16. Feb 2015
Antwort Antwort
Kralle

Registriert seit: 31. Okt 2004
Ort: Bremerhaven
355 Beiträge
 
Delphi XE7 Professional
 
#1

[gelöst] Unerlaubte Zeichen in String finden

  Alt 15. Feb 2015, 20:39
Delphi-Version: XE7
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 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
OS: Windows 10 Professional, Delphi XE7 Pro SP1 +(Mobilpack & FireDAC)

Geändert von Kralle (16. Feb 2015 um 15:10 Uhr) Grund: gelöst
  Mit Zitat antworten Zitat
ringli

Registriert seit: 7. Okt 2004
509 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Unerlaubte Zeichen in String finden

  Alt 15. Feb 2015, 21:01
Ich glaube da könnte CharInSet hilfreich sein.
  Mit Zitat antworten Zitat
mm1256

Registriert seit: 10. Feb 2014
Ort: Wackersdorf, Bayern
640 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

AW: Unerlaubte Zeichen in String finden

  Alt 15. Feb 2015, 21:32
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;
Gruss Otto
Wenn du mit Gott reden willst, dann bete.
Wenn du ihn treffen willst, schreib bei Tempo 220 eine SMS
  Mit Zitat antworten Zitat
SProske

Registriert seit: 16. Feb 2015
Ort: Halle/S.
116 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#4

AW: Unerlaubte Zeichen in String finden

  Alt 16. Feb 2015, 08:52
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/)
Sebastian

Geändert von SProske (16. Feb 2015 um 09:19 Uhr) Grund: Anmerkung zu Leerstrings
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#5

AW: Unerlaubte Zeichen in String finden

  Alt 16. Feb 2015, 10:52
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
mm1256

Registriert seit: 10. Feb 2014
Ort: Wackersdorf, Bayern
640 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

AW: Unerlaubte Zeichen in String finden

  Alt 16. Feb 2015, 13:46
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;
  ...
Gruss Otto
Wenn du mit Gott reden willst, dann bete.
Wenn du ihn treffen willst, schreib bei Tempo 220 eine SMS
  Mit Zitat antworten Zitat
Kralle

Registriert seit: 31. Okt 2004
Ort: Bremerhaven
355 Beiträge
 
Delphi XE7 Professional
 
#7

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

  Alt 16. Feb 2015, 15:08
Moin,

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ß

Danke, für Eure Hilfe.

Gruß HEiko
OS: Windows 10 Professional, Delphi XE7 Pro SP1 +(Mobilpack & FireDAC)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#8

AW: Unerlaubte Zeichen in String finden

  Alt 16. Feb 2015, 18:32
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?

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.
http://www.delphipraxis.net/15428-da...t-pruefen.html
http://www.delphipraxis.net/73213-%5...ateinamen.html
Hier im Forum suchenDateiname gültig
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (16. Feb 2015 um 18:35 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:30 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