String überprüfen
Badboy46
- php
0 Sönke Tesch0 lulu
Hallo,
ich möchte ein String überprüfen
Bedingung ist... er muss eine Zahl und ein Buchstaben enthalten
bis jetzt hab ich das mit zwei ereg Anweisungen gelöst
gibt es eine andere Möglichkeit, womit man das schöner lösen kann?
ich möchte ein String überprüfen
Bedingung ist... er muss eine Zahl und ein Buchstaben enthalten
/[0-9][a-z]|[a-z][0-9]/i oder besser die Abkürzung /\d\w|\w\d/ (letzteres Perl-kompatibel, keine Ahnung, ob das mit POSIX geht).
Gruß,
soenk.e
Huhu Badboy46
bis jetzt hab ich das mit zwei ereg Anweisungen gelöst
gibt es eine andere Möglichkeit, womit man das schöner lösen kann?
Vielleicht mit nur einer "ereg Anweisung" resp. einem regulären Ausdruck?
Wobei zwei Anweisungen nicht zwangsläufig schlechter als eine sein müssen.
Das macht die Sache doch eigentlich ziemlich transparent wenn man
z.B. folgendes hat
$success = (preg_match('#[a-z]#i', $s) && preg_match('#\d#', $s));
Um das in einen Ausdruck zu quetschen müsste man ja etwas wie folgt formulieren
$success = preg_match('#([a-z]\d)|(\d[a-z])#i', $s);
Da man ja nicht weiß ob erst ein Buchstabe und dann eine Zahl oder umgekehrt vorkommen.
Das zweite Beispiel dürfte bei einem Performance-Test deutlich schlechter als das erste abschneiden.
Und wenn jetzt z.B. noch auf ein Sonderzeichen geprüft werden soll (ich vermute mal es geht hier um Passwörter) ist das im ersten Fall schnell ergänzt ohne das die Übersichtlichkeit leidet.
Im zweiten Beispiel fängt das dann an "murxig" zu werden.
Viele Grüße
lulu
Hallo lulu,
ich hab das so probiert
$check = ereg('([0-9]+)', $password) && ereg('([a-Z]+)', $password) ? true:false;
da bekomme ich diese Fehlermeldung :-(
Warning: ereg(): REG_ERANGE in /home/xxx/www.xxx.de/auth/_lib/function.php on line 62
Huhu BadBoy
$check = ereg('([0-9]+)', $password) && ereg('([a-Z]+)', $password) ? true:false;
da bekomme ich diese Fehlermeldung :-(
Warning: ereg(): REG_ERANGE in /home/xxx/www.xxx.de/auth/_lib/function.php on line 62
Ah, ein kniffliger Fehler ....
die Zeichenklasse [a-Z] ist es, mit [a-z] klappt es.
True und false brauchst Du in diesem Fall aber nicht extra zuweisen.
Durch die logische UND-Verknüpfung gibt der Ausdruck auch so entweder true, oder false zurück.
Die Klammern und das + brauchst Du nicht, wobei es nichts schadet, aber Du wolltest ja etwas schönes ;-)
Beachte das Du eregi benutzen musst wenn case insensitve gematched werden soll.
Also das hier sollte es tun
$check = ereg('[0-9]', $password) && eregi('[a-z]', $password);
Gute Nacht und viele Grüße
lulu
Hallo lulu,
$check = ereg('[0-9]', $password) && eregi('[a-z]', $password);
funktioniert jetzt soweit...
diese Funktion gibt mir jetzt true, wenn eine Ziffer und ein Buchstabe enthalten ist...
ich bräcuhte dann aber ein false, wenn eins davon nicht zutrifft ein true
ist das der richtige Lösungsansatz?
$check = !ereg('[0-9]', $password) || !eregi('[a-z]', $password);
so funktioniert es, ist nur bissel verwirrend wegen den "||"
Hallo,
$check = ereg('([0-9]+)', $password) && ereg('([a-Z]+)', $password) ? true:false;
verwende besser die preg_*-Funktionen (hier: preg_match) - die sind mächtiger und afaik auch schneller (->http://de.php.net/ref.pcre)
da bekomme ich diese Fehlermeldung :-(
Warning: ereg(): REG_ERANGE in /home/xxx/www.xxx.de/auth/_lib/function.php on line 62
"REG_ERANGE" kommt auf php.net nicht vor, aber eine Googlesuche lässt mich vermuten, dass dieser Fehlercode auftaucht wenn man in einem regulären Ausdruck einen ungültigen Bereich angegeben hat (in deinem Fall ist a-Z (kleines A aber großes Z) falsch - versuch es mal mit '[a-z]' (oder wenn du auch Großbuchstaben finden willst mit '[a-zA-Z]').
Grüße aus Nürnberg
Tobias
Hallo Tobias,
ich wusse nicht, dass preg_* schneller ist
ich dachte, dass die Funktion bzgl. der regülären Ausdrucke etwas langsamer ist
kann man eigentlich davon ausgehen, dass Provider regex unterstützen?
Oder gibt es einige Provider die PHP mit "--without-pcre-regex" kompilieren?
bzgl. a-Z
irgendwie hab ich in Erinnerung, dass ich das so schon mal verwendet habe, kann mich aber auch irren ;-)
Hallo,
kann man eigentlich davon ausgehen, dass Provider regex unterstützen?
wenn er eine halbwegs aktuelle Version einsetzt imho ja.
Oder gibt es einige Provider die PHP mit "--without-pcre-regex" kompilieren?
ich weiß es nicht, kann mir es aber nicht vorstellen - probier es doch einfach mal aus, merh als nicht funktionieren kann es doch nicht :-)
Grüße aus Nürnberg
Tobias
Hallo
Oder gibt es einige Provider die PHP mit "--without-pcre-regex" kompilieren?
ich weiß es nicht, kann mir es aber nicht vorstellen - probier es doch einfach mal aus, merh als nicht funktionieren kann es doch nicht :-)
bei mir funktioniert es auf jedenfall ;-)
nur wenn ich mein Script anderen zur Verfügung stelle, sieht das ziemlich schlecht aus, wenn es dann Fehlermeldungen hagelt ;-)
Kay
Hello,
bei mir funktioniert es auf jedenfall ;-)
nur wenn ich mein Script anderen zur Verfügung stelle, sieht das ziemlich schlecht aus, wenn es dann Fehlermeldungen hagelt ;-)
Du kannst ja auch mal
print_r(get_defined_functions);
in dein Script schreiben.
Dass weißt Du es genauer.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hallo
Du kannst ja auch mal
print_r(get_defined_functions);
Notice: Use of undefined constant get_defined_functions - assumed 'get_defined_functions' in /home/xxx/www.xxx.de/auth/test.php on line 13
get_defined_functions
hab "print_r(get_defined_functions);" eingetragen... oder meinst du damit was anderes?
ps. gibt es hier eine Funktion, womit man sich neue Beiträge anzeigen lassen kann?
Hello,
Du kannst ja auch mal
print_r(get_defined_functions);
Notice: Use of undefined constant get_defined_functions - assumed 'get_defined_functions' in /home/xxx/www.xxx.de/auth/test.php on line 13
get_defined_functionshab "print_r(get_defined_functions);" eingetragen... oder meinst du damit was anderes?
Ach sorry, ich habe wieder den PHP-Quirks-Mode benutzt.
print_r(get_defined_functions());
so sollte es aber nun funktionieren.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hallo Tom,
viel bringt mir das aber nicht ;-)
wenn ich das in mein Script einbaue, weiss ich nur, was mein Server unterstützt, wenn ich aber dieses Script jemand anders gebe, bringt es mir ja nix, wenn das ausgegeben wird *g*
ich könnte höchstes eine Abfrage irgendwie basteln, wo das abgefragt wird... hm...
Kay