regex con la lingua russa
Domanda
Non riesco a risolvere il mio problema con regexp.
Ok, quando si digita:
$string = preg_replace("#\[name=([a-zA-Z0-9 .-]+)*]#","$name_start $1 $name_end",$string);
tutto è ok, tranne che la situazione con la lingua russa.
così, cerco di riscrivere questa reg-exp:
$string = preg_replace("#\[name=([a-zA-Z0-9**а-яА-Я** .-]+)*]#","$name_start $1 $name_end",$string);
, ma questo non funziona,
So che qualche idea, basta scrivere:
$string = preg_replace("#\[name=([a-zA-Z0-9йцукенгшщзхъфывапролджэячсмитьбю .-]+)*]#","$name_start $1 $name_end",$string);
, ma questo è pazzo: D
Per favore, dammi semplice variante
Soluzione
Provare una gamma Unicode:
'/[\x{0410}-\x{042F}]/u' // matches a capital cyrillic letter in the range A to Ya
Non dimenticare il flag / u per Unicode.
Nel tuo caso:
"#\[name=([a-zA-Z0-9\x{0430}-\x{044F}\x{0410}-\x{042F} .-]+)*]#u"
Si noti che la stella nella vostra regex è ridondante. Tutto già viene "mangiata" dal PLUS. Ciò avrebbe fatto lo stesso:
"#\[name=([a-zA-Z0-9\x{0430}-\x{044F}\x{0410}-\x{042F} .-]+)]#u"
Altri suggerimenti
Lo script unicode comune (supportato dal PCRE 3.3) fornisce un test per la proprietà cirillico .
es. sostituire tutti i caratteri che non sono né cirillico né (latino) cifre:
$string = '1a2b3cйdцeуfкбxюy';
echo preg_replace('/[^0-9\p{Cyrillic}]/u', '*', $string);
È possibile trovare la documentazione relativa a tale funzione in http://www.pcre.org/pcre.txt "proprietà dei caratteri Unicode".
E si deve specificare il flag PCRE8 (u) come descritto in http: //docs.php .net / reference.pcre.pattern.modifiers
Questo ha funzionato per me:
/^[а-яА-Я\p{Cyrillic}0-9\s\-]+$/
Ho testato in tutti i browser tra cui Safari