Variable in Regulärem Ausdruck
Stefan Kleeschulte
- php
Hi zusammen!
Ich habe folgendes Problem: Ich möchte mit Hilfe eines Regulären Ausdrucks einen Benutzernamen auf richtigkeit Prüfen. In einer Konfigurations-Datei ist unter anderem festgelegt, wie lang der Benutzername mindestens sein muss und höchstens sein darf (in Variablen gespeichert).
Wie kann ich nun im Regulären Ausdruck auf diese Variablen zurückgreifen?
Zur verdeutlichung was ich bräuchte, was aber nicht klappt:
/^\b[\w-.]{$nickname_minlength,$nickname_maxlength}\b$/
Weiß einer von euch ob/wie das geht?
CU :-)
Stefan
Hallo Stefan,
Wie kann ich nun im Regulären Ausdruck auf diese Variablen zurückgreifen?
Zur verdeutlichung was ich bräuchte, was aber nicht klappt:
/^\b[\w-.]{$nickname_minlength,$nickname_maxlength}\b$/
Hmmm, folgendes geht:
%>perl -we "$min = 1; $max = 3; $_ = 'abbcccddddeeeee'; print $1 while /((\w)\2{$min,$max})/g;"
und ergibt:
%> bbcccddddeeee
Vermutlich liegt der Fehler eher im \b das vielleicht nicht dort trifft, wo Du es erwartest, wenn Du eine Klasse angibst, in der auch nichtalphanumerische Zeichen vorkommen. \b trifft nämlich nur zwischen \w und \W aber nicht zwischen . und \W und auch nicht zwischen - und \W. Also kann Dein Ausdruck nicht treffen, falls der String mit \W beginnt oder aufhört. Da Du am Anfang und Ende verankerst, kannst Du Dir \b vielleicht sogar ganz sparen. Poste doch mal den Text, auf den Du den regulären Ausdruck loslässt ohne zu treffen, und den String den Du erwartest zu finden.
Gruß Alex
Hallo Stefan,
Wie kann ich nun im Regulären Ausdruck auf diese Variablen zurückgreifen?
Zur verdeutlichung was ich bräuchte, was aber nicht klappt:
/^\b[\w-.]{$nickname_minlength,$nickname_maxlength}\b$/
Hmmm, folgendes geht:
%>perl -we "$min = 1; $max = 3; $_ = 'abbcccddddeeeee'; print $1 while /((\w)\2{$min,$max})/g;"
und ergibt:
%> bbcccddddeeee
Vermutlich liegt der Fehler eher im \b das vielleicht nicht dort trifft, wo Du es erwartest, wenn Du eine Klasse angibst, in der auch nichtalphanumerische Zeichen vorkommen. \b trifft nämlich nur zwischen \w und \W aber nicht zwischen . und \W und auch nicht zwischen - und \W. Also kann Dein Ausdruck nicht treffen, falls der String mit \W beginnt oder aufhört. Da Du am Anfang und Ende verankerst, kannst Du Dir \b vielleicht sogar ganz sparen. Poste doch mal den Text, auf den Du den regulären Ausdruck loslässt ohne zu treffen, und den String den Du erwartest zu finden.
Wenn ich die beiden Variablen durch Zahlen ersetze klappt es. (Z. B. mit "abcabc", "abc_abc" oder "abc.-ABC").
Ich fürchte eher es liegt an PHP, mit Perl klappts. (Hab's gerade ausporbiert...)
Hast du noch 'ne Idee?
CU :-)
Stefan
Habe die Lösung, hätte ja auch selber drauf kommen können...
preg_match ("/^\b[\w-.]{".$nickname_minlength.",".$nickname_maxlength."}\b$/", $nickname)
Trotzdem Danke!
CU :-)
Stefan
Habe die Lösung, hätte ja auch selber drauf kommen können...
preg_match ("/^\b[\w-.]{".$nickname_minlength.",".$nickname_maxlength."}\b$/", $nickname)
Trotzdem Danke!
Grummel, ich glaub ich bin zu müde, diese "Lösung" funktioniert nicht, ich hab' beim ausprobieren was falsch gemacht...
Ich geh schlafen und frag morgen nochmal nach...
CU <gähn> (-:
Stefan
Joho,
preg_match ("/^\b[\w-.]{".$nickname_minlength.",".$nickname_maxlength."}\b$/", $nickname)
Grummel, ich glaub ich bin zu müde, diese "Lösung" funktioniert nicht, ich hab' beim
ausprobieren was falsch gemacht...
Wozu hast du die \b da stehen? Das heisst, dass die Strings jeweils mit einem \W enden
muessen, also z. B. - oder .
Lass die \b weg, und dein RegEx sollte korrekt matchen.
Gruss,
CK