MudGuard: pregmatch -> undenliche Prüfung von Variablen (SONDERZEICHEN)

Beitrag lesen

Hi,

Hierfür habe ich mir Pregmatch ausgesucht. Mein erster Ansatz sieht auch schon ganz gut aus:
if (false === preg_match ('#[A-Z].*[a-z].*[0-9]#', $check)) {

Wirklich?
Das testet auf

  • beliebige Zeichen (da keine Verankerung am Stringanfang)
  • gefolgt von einem Großbuchstaben
  • gefolgt von beliebigen Zeichen
  • gefolgt von einem Kleinbuchstaben
  • gefolgt von beliebigen Zeichen
  • gefolgt von einer Ziffer
  • gefolgt von beliebigen Zeichen (da keine Verankerung am Stringende)

<A-!"§$%a@€\°0>

wird also gematcht.

Nun ist mir beim testen aufgefallen, das ich noch ein leerzeichen, bindestrich als auch die deutschen Sonderzeichen ß,ö,ä,ü,Ö,Ä,Ü nicht dabei berücksichtigt habe.
Wie kann ich die hier einfügen?

Umlaute und Leerzeichen sind weder inner- noch außerhalb von Zeichenklassen mit Sonderbedeutung belegt (solange der x-Modifier nicht benutzt wird, dann ist whitespace, also das Leerzeichen, spezialzubehandeln), also einfach reinschreiben.
Der Bindestrich ist außerhalb der Zeichenklasse ohne Sonderbedeutung, kann also dort auch einfach so notiert werden. Innerhalb der Zeichenklasse muß er als letztes Zeichen notiert werden (oder als erstes bzw. falls das erste Zeichen der Negierungsoperator ^ ist als 2. Zeichen), um ihn seiner Sonderbedeutung zu berauben.

Aber ich glaube nicht, daß Dein Ausdruck durch Hinzufügen dieser Zeichen besser wird.
Denn vermutlich willst Du etwas komplett anderes abprüfen als das, was Dein momentaner Ausdruck prüft ...

cu,
Andreas

--
Warum nennt sich Andreas hier MudGuard?
O o ostern ...
Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.