![]() |
String auf Zeichen prüfen
Hallo Zusammen :)
Ich schreibe gerade einen Passwortmanager. Nun hänge ich am Login der Oberfläche. Wenn man das Programm zum 1. mal startet, soll der User ein Masterpasswort vergeben. Ich wollte nun, dass während der Eingabe Überprüfungen im Hintergrund laufen, welche dann Hinweise ausgeben wie z.B.: Verwenden Sie Großbuchstaben, Zahlen, Blutgruppe, etc. (wie man es ja kennt :lol:). Nun mein Problem: Ich möchte die Eingabe Prüfen ob Großbuchstaben, Kleinbuchstaben und Zahlen vorhanden sind. Mein Plan war das mit
Delphi-Quellcode:
etc. zu machen, jedoch funktioniert das natürlich nicht : "Inkompatible Typen: TCaption und AnsiChar". Leider habe ich nichts funktionierentes gefunden, wie ich den Text in einen AnsiChar umwanlde :oops:.
if not (ed_Passwort.Text in ['0'..'9']) then
Vllt hat ja jemand einen ganz anderen Ansatz.:?: Vielen Dank schonmal :thumb: |
AW: String auf Zeichen prüfen
Du musst bei der Nutzung von "in" zeichenweise prüfen.
Sinngemäß sowas in der Art:
Delphi-Quellcode:
for i := 1 to Length(ed_Passwort.Text) do begin
if not (ed_Passwort.Text[i] in ['0'..'9']) then begin ... end; end; |
AW: String auf Zeichen prüfen
Mit einem OnKey OnKeyDown etc Event deiner Eingabe die Char's abfangen, umzweigen, verarbeiten etc ?
|
AW: String auf Zeichen prüfen
Vielleicht auch so. Sobald ein nicht erlaubtes Zeichen drin steht, gehts nicht weiter
Delphi-Quellcode:
Das könnte man beispielsweise in eine Funktion packen. Aber man sollte bei einem Passwort eh noch mehr als azAZ09 erlauben.
var
i: Integer; begin Caption := 'Jä'; for i := 1 to Length(Edit1.Text) do begin if not CharInSet(Edit1.Text[i], ['a' .. 'z', 'A' .. 'Z', '0' .. '9']) then begin Caption := 'Nä'; Break; end; end; end; ggf lässt sich aber auch hier draus was bauen
Delphi-Quellcode:
var
i: Integer; Upper, Lower, Numbers: Boolean; begin Upper := False; Lower := False; Numbers := False; Caption := 'Jä'; for i := 1 to Length(Edit1.Text) do begin Upper := CharInSet(Edit1.Text[i], ['A' .. 'Z']); Lower := CharInSet(Edit1.Text[i], ['a' .. 'z']); Numbers := CharInSet(Edit1.Text[i], ['0' .. '9']); ... end; |
AW: String auf Zeichen prüfen
Ungetestet:
Delphi-Quellcode:
function ValidPW(const s: string): Boolean;
var ContainsUpper: Boolean; ContainsLower: Boolean; ContainsNumber: Boolean; c: char; begin ContainsUpper := false; ContainsLower := false; ContainsNumber := false; Result := false; for c in s do begin if CharInSet(c, ['0'..'9']) then ContainsNumber := true else if c = AnsiUpperCase(c) then ContainsUpper := true else if c = AnsiLowerCase(c) then ContainsLower := true; Result := ContainsUpper and ContainsLower and ContainsNumber; if Result then break; end; end; |
AW: String auf Zeichen prüfen
Ich war schon auf dem richtigen Pfad, und Deddy hat es bravourös kompetiert :thumb:
|
AW: String auf Zeichen prüfen
bei simpler typ Char Auswertung grenz ich's so ein:
if chTemp in ['0'..'9', 'A'..'Z'] then viele wege führen nach Rom ;-) |
AW: String auf Zeichen prüfen
Deddys Algorithmus funktioniert nicht, denn ValidPW('0') ergibt doch true.
|
AW: String auf Zeichen prüfen
teste es mit umlauten, sonderzeichen, punkt strich etc, dann result = false
|
AW: String auf Zeichen prüfen
Naja, wenn ich sowohl eine Ziffer, als auch einen Kleinbuchstaben, sowie einen Großbuchstaben haben möchte, muss ich auch auf die Länge der Eingabe prüfen. Die muss also mindestens 3 sein.
Und diese Aussage dürfte kaum stimmen: Zitat:
Delphi-Quellcode:
Das dürfte bei einem Zeichen kaum hinzubekommen sein.
ContainsUpper and ContainsLower and ContainsNumber
Zumindest mein Delphi weigert sich da ;-) Man könnte DeddyHs Vorschlag ja so abwandeln:
Delphi-Quellcode:
Dann brauche ich halt mindestens 4 Kleinbuchstaben, mindestens 4 Großbuchstaben und eine Ziffer.
function ValidPW(const s: string; MinLower, MinUpper, MinNumber : Integer): Boolean;
var ContainsUpper: Integer; ContainsLower: Integer; ContainsNumber: Integer; c: char; begin ContainsUpper := 0; ContainsLower := 0; ContainsNumber := 0; Result := false; for c in s do begin if CharInSet(c, ['0'..'9']) then Inc(ContainsNumber) else if c = AnsiUpperCase(c) then Inc(ContainsUpper) else if c = AnsiLowerCase(c) then Inc(ContainsLower); Result := (ContainsUpper >= MinUpper) and (ContainsLower >= MinLower) and (ContainsNumber >= MinNumber); if Result then break; end; end; // Aufruf: Case ValidPW(ed_Passwort.Text,4,4,1) of true : ShowMessage('Passwort genügt den Anforderungen'); False : ShowMessage('Passwort genügt nicht den Anforderungen'); end; 'ne Erweiterung um Sonderzeichen dürfte da dann auch kein großes Problem mehr sein. |
AW: String auf Zeichen prüfen
Vielen Dank für die ganzen Antworten! :)
Ich habe es nun so gelöst wie @Delphi.Narium es zeigt :) |
AW: String auf Zeichen prüfen
Nur so nebenher zum Thema:
![]() Da ist dann auch das correcthorsebatterystaple XKCD dabei ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz