Mailinglisten-Archive |
Armin Briatta wrote: > Einen schönen Abend an alle, > > ich stehe auf dem Schlauch mit regulären Ausdrücken. > Ich habe folgendens gebaut: > > if(!preg_match("/^[[:alpha:]]{1,18}(([ > ]|-|\.){0,2}[[:alpha:]]+\.?){0,6}([ ])?(\-)?([ > 123456789]{0,4}?[\.]?)?$/u" ,$_original)) return false; > > Es sollen damit Eingaben von Namen in einem Formular getestet werden. > > Jetzt habe ich zum ersten Mal überall mit charset utf-8 gearbeitet. > > Ich habe lokal den Apache (Xampp) installiert (Windows). Wenn ich an den > regulären Ausdruck ein \u anhänge, so werden im Formular alle möglichen > Sonderzeichen akzeptiert (deutsche Umlaute usw.). Auf dem Server (1und1) > funktioniert dies aber nur, wenn ich alle Umlaute, welche akzeptiert > werden sollen, noch einmal explizit angebe, also z.B: [[:alpha:]äöüÄÖÜß]. > > Wo kann mein Fehler liegen? Gibt es da einen eleganteren Weg? Ich würde dich gerne auf die Nette Tabelle verweisen, die du findest, wenn du hier: http://www.regular-expressions.info/refflavors.html Nach gaaaanz unten scrollst. Dort steht wie die "POSIX Bracket Expressions" von verschiedenen Parsern behandelt werden. Bei der PCRE steht nur "ascii", was bedeutet, dass nur Zeichem, die zu ascii gehören akzeptiert werden. Das steht auch ganz explizit so in der Doku der PCRE: "In PCRE, \d, \D, \s, \S, \w, and \W recognize only ASCII characters." und "In PCRE, POSIX character set names recognize only ASCII characters." http://www.pcre.org/pcre.txt Was \u angeht steht dort sogar: "The following Perl escape sequences are not supported: \l, \u, \L, \U, and \N. In fact these are implemented by Perl's general string-handling and are not part of its pattern matching engine. If any of these are encountered by PCRE, an error is generated." Ich frage mich daher eher, warum es unter Windows funktioniert. Allerdings haben wir das Problem im Thread "Treffer mit Regex erweitern" auch schon gehabt. > > Grüße > Armin Briatta Yannik
php::bar PHP Wiki - Listenarchive