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

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top