dedlfix: Regex - "Zeichen muß enthalten sein"

Beitrag lesen

Tach!

Dir ist die Reihenfolge egal, aber ich kenne keine Möglichkeit, einen Regex ohne Reihenfolgenbeachtung zu erstellen.
Alle möglichen Reihenfolgen auflisten und oder-verknüpfen. Sind in dem Fall nur drei also 3*2*1 = 6 Möglichkeiten.

Das hatte ich auch schon überlegt, aber da ich ohne das groß nachzuprüfen von 9 Möglichkeiten ausgegangen bin, hab ich die Idee gleich wieder verworfen. 6 geht ja grad noch so. Wenn nun aber noch ein Sonderzeichen dazukommt, sind wir schon bei 4*6 Möglichkeiten, und dann wird's langsam ungemütlich.

3 positive Lookaheads, je einer für .*[a-z] und .*[A-Z] und .*[0-9], und dann noch normal auf [1]+$ (+ ggf. durch {x,y} für min/max-Länge prüfen.

Warum willst du denn die restlichen Zeichen ausschließen? Es war nicht gefordert, nur a-zA-Z0-9 zuzulassen. Es soll nur jeweils ein Vertreter von diesen Klassen enthalten sein. Und wenn du zwischen explizit Anfang ^ und Ende $ angibst, wo soll da noch eine Assertion Platz finden?

Ansonsten hatte ich das Handbuch so verstanden, dass PHP Assertions mit variabler Länge nicht mag. Hab mich da wohl geirrt, denn die Assertions-Idee scheint tatsächlich zielführend zu sein. Ich hab jedenfalls in meinen Versuchen mit /(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])/ keinen Gegenbeweis gefunden.

dedlfix.


  1. a-zA-Z0-9 ↩︎