2016-06-12 22 views
1

Ich möchte Benutzernamen in PHP validieren und sie mit einem regulären Ausdruck überprüfen. Sie sollten mindestens 2 'echte' Zeichen enthalten, wie A, Ä, s, 1 oder 5, aber einige andere wie . oder _ oder ein Leerzeichen sollten ebenfalls erlaubt sein. Die Position der benötigten Zeichen spielt keine Rolle.Regex - erfordern einige Zeichen und erlauben nur einige zusätzliche?

Das ist, was ich bisher hatte, und leider auch nicht ... als Benutzernamen erlauben:

preg_match('/^[\pL\pN\s-+_.]+$/u', $value) 

ich nur bestimmte Zeichen zulassen möchten. Zum Beispiel < oder #. Wie kann ich das tun?

+0

** Muss ** es '' ',' 'enthalten, Leerzeichen? oder es ist optional? – Shafizadeh

+0

nein sie sollten optional sein – haheute

Antwort

1

Mal sehen ...

  • Mindestens zwei Buchstaben/Zahlen: ^(?:.*?[\p{L}\p{N}]){2}
  • Andere Zeichen erlaubt: ^[-+.\w ]+$

, die zusammen kombinieren lassen, und wir erhalten:

^(?=(?:.*?[\p{L}\p{N}]){2})[-+.\w ]+$ 

Ich verwendete eine Lookahead für den Teil, der überprüft, gibt es mindestens 2 erforderliche Zeichen, und legen Sie einfach alles andere in den Hauptteil des Musters. Zusammen können Sie damit zwei verschiedene Bedingungen über dieselbe Eingabe prüfen.

+0

könnten Sie diesen Teil erklären '?:. *?'? – haheute

+2

@haheute '(? = ...)' ist ein Lookahead, '(?: ...)' ist eine nicht einfangende Gruppe '. *?' Passt zu allem, was nicht gierig ist. Jetzt haben Sie die Suchbegriffe und Sie sollten in der Lage sein, herauszufinden, was jeder Trottel wirklich tut :-) – andlrc

+1

@haheute, andlrc gab Ihnen die Antwort - ich werde Sie nur auf [regex101] zeigen (https: // regex101. com/r/mM7aE1/1), die jedes PCRE-Muster, das Sie werfen, zerlegen kann, wenn Sie mit einer Funktion zu kämpfen haben (siehe * Erklärung *). –

Verwandte Themen