Regexp mit russischer Lang
Frage
Ich kann mein Problem mit Regexp nicht lösen.
OK, wenn ich tippe:
$string = preg_replace("#\[name=([a-zA-Z0-9 .-]+)*]#","$name_start $1 $name_end",$string);
Alles ist in Ordnung, außer in der russischen Sprache.
Also versuche ich, diesen Reg-Exp wieder zu tanzen:
$string = preg_replace("#\[name=([a-zA-Z0-9**а-яА-Я** .-]+)*]#","$name_start $1 $name_end",$string);
Aber das funktioniert nicht,
Ich kenne eine Idee, schreiben Sie einfach:
$string = preg_replace("#\[name=([a-zA-Z0-9йцукенгшщзхъфывапролджэячсмитьбю .-]+)*]#","$name_start $1 $name_end",$string);
Aber das ist verrückt: D.
Bitte gib mir eine einfache Variante
Lösung
Probieren Sie einen Unicode -Bereich aus:
'/[\x{0410}-\x{042F}]/u' // matches a capital cyrillic letter in the range A to Ya
Vergessen Sie nicht das /U -Flag für Unicode.
In Ihrem Fall:
"#\[name=([a-zA-Z0-9\x{0430}-\x{044F}\x{0410}-\x{042F} .-]+)*]#u"
Beachten Sie, dass der Stern in Ihrem Regex überflüssig ist. Alles wird schon vom Plus "gegessen". Dies würde das gleiche tun:
"#\[name=([a-zA-Z0-9\x{0430}-\x{044F}\x{0410}-\x{042F} .-]+)]#u"
Andere Tipps
Das gemeinsame Unicode -Skript (unterstützt seit PCRE 3.3) enthält einen Test für die Eigenschaft kyrillisch.
ZB ersetzen Sie alle Zeichen, die weder kyrillisch noch (lateinische) Ziffern sind:
$string = '1a2b3cйdцeуfкбxюy';
echo preg_replace('/[^0-9\p{Cyrillic}]/u', '*', $string);
Sie finden die Dokumentation für diese Funktion unter http://www.pcre.org/pcre.txt "Unicode -Zeicheneigenschaften".
Und Sie müssen das PCRE8 -Flag (u) wie beschrieben angeben http://docs.php.net/reference.pcre.pattern.modifierer
Dieser hat für mich funktioniert:
/^[а-яА-Я\p{Cyrillic}0-9\s\-]+$/
Ich habe in allen Browsern einschließlich Safari getestet