Regex suche nach Buchstaben und Zahlen, aber nciht nach Sonderzeichen.

  • Themenstarter Themenstarter FlaverSaver
  • Beginndatum Beginndatum
F

FlaverSaver

Hallo liebes Forum,

ich habe ein Problem mit Regex.
Bei meiner Registration für neue Benutzer sollen Sonderzeichen erst ab fünf Zahlen bzw. Buchstaben erlaubt sein.

Momentan zähle ich mit strlen die Länge des Benutzernamens, wenn der Benutzername fünf oder weniger : Zeichen hat setze ich folgenden Regex
PHP:
$regex = '/^([A-Za-z0-9öäüÄÖÜßáàâéèêíìîóòôúùû]?(\s)?)+$/';

Wenn er mehr Zeichen hat setze ich:
PHP:
$regex = '/^([A-Za-z0-9öäüÄÖÜßáàâéèêíìîóòôúùû:;()!?*._-]?(\s)?){4,}$/';

Nun ist das Problem, dass zum Beispiel der Benutzername ************ (sechs Rufzeichen) gültig ist, obwohl er keine Zahlen bzw. Buchstaben enthält. Das liegt ja daran das beim zweiten Regex auch meine Sonderzeichen gültige Zeichen sind und mit gezählt werden.

Ich habe folgenden Regex probiert, um dafür zu sorgen, dass mindestens fünf Zahlen bzw. Buchstaben verwendet werden müssen. Nur leider funktioniert er nicht.
PHP:
$regex = '/^([A-Za-z0-9öäüÄÖÜßáàâéèêíìîóòôúùû:;()!?*._-]?(\s)?)([A-Za-z0-9öäüÄÖÜßáàâéèêíìîóòôúùû]{4,})$/';

Was muss ich also ändern, damit mindestens fünf Buchstaben vorhanden sein müssen, damit Sonderzeichen als gültig anerkannt werden?

mfg
Philip
 
Mach doch ein Regex, dass Dir die Anzahl der Einzelfunde hergibt, also

(1) egal, wieviele Zeichen, erstmal Funde für Zeichen [a-zA-z0-9]{1} zählen.
(2) Wenn weniger als 6, dann muß Len mit Count übereinstimmen
(3) Wenn länger als 5, dann muß Len-Count mindestens 5 sein.

mfg chmee
 
Hallo,

sehr gute Idee. Warum immer so umständlich? ;)

Nur wie zähle ich nun mit preg_match die Treffer? Oder könnte ich einfach
PHP:
preg_match('muster', 'string', $treffer);
echo count($treffer);
machen?

//Habs gerade probiert, count($treffer); gibt immer 0 zurück.

mfg
Philip
 
preg_match gibt doch nur einen Fund zurück. Du nimmst preg_match_all
und solltest mit echo count($treffer[0]); die Anzahl bekommen.

mfg chmee
 
Hallo,

so dann gebe ich meinen Postings auch mal eine Persönlichkeit. :)

So ich glaube ich stelle mich gerade verdammt doof an.

Ich habe folgendes:
PHP:
$regex = '/^([A-Za-z0-9öäüÄÖÜßáàâéèêíìîóòôúùû ]?(\s)?)+$/';
$eingabe = 'lol was soll das eig 123';

preg_match_all($regex, $eingabe, $treffer );

echo 'Count:'.count($treffer[0]).'<br/>Eingabe:'.$eingabe;

echo '<pre>';
var_dump($treffer);

Ich bekomme aber immer nur einen Treffer zurück...

Ich weiß nicht ob da irgendwo ein grober Schnitzer ist oder ob ich einfach gerade voll auf dem Schlauch stehe...

Philip
 
Du nimmst als Quantor ein ? (entspricht {0,1}), wogegen ich auf genau ein Zeichen beschränke {1} UND Deine Regex bezieht sich immer noch auf eine längere Sequenz (allein durch Anfang ^ und Ende $), anstatt auf einzelne Zeichen..

PHP:
$string="DasIstEin#TEST";
$regex="#[A-Za-z0-9öäüÄÖÜßáàâéèêíìîóòôúùû]{1}#";

preg_match_all($regex,$string,$found);

echo "<pre>";
var_dump($found);
echo "</pre>";

echo count($found[0])." von ".strlen($string)." sind Nichtsonderzeichen!";
Sorry, Fehler können drin sein, habs grad so hingeschmiert..

mfg chmee

p.s.: Schau mal in meiner Signatur, das ist der Regex-Online-Tester, sehr feines Spielzeug zum Testen und Verstehen.

p.p.s.: Willkommen ;)
p.p.p.s.: :D Es heißt strlen(), nicht len();
 
Hey,

Super, danke das klappt wunderbar, und es ist bis jetzt Fehlerfrei!

Ok, den Regex Tester probiere ich dann mal aus.

Danke fürs "Willkommen" ;)

Wo habe ich oder auch du len() verwendet? :D

mfg
Philip
 
Ich hatte anfangs in meinem Source len() benutzt und nach nem Kurztest bemerkt, dass das echo nicht ausgeworfen wird, kurzer Blick.. Ah ja, strlen() anstatt len()..

mfg chmee
 
Zurück