2013-06-12 5 views
0

У меня есть ое использование preg_replace, но я хочу, чтобы мой вход поиска принимает другой языкPHP preg_replace для нескольких языков

Keep - китайская, японцы, немецкие и т.д. ..

Удалить - символ характер как @ # $%^*() те

Это один только сохранить английский preg_replace("/[^a-zA-Z0-9]+/", "", $search);

каким-либо образом настроить Ф.О. r multi язык?

+0

Так, что * делать * вы хотите сохранить и что вы хотите удалить? Может быть, проще использовать черный список, а не белый список? – deceze

+0

Для регулярного выражения/php 'æ' является таким же символом юникода, как'^'. Лучше всего сделать это, чтобы сделать черный список, и просто заменить его. ('preg_replace ("/[! \ "# ¤% & \ (\) = /] +", "", $ search); '). – h2ooooooo

ответ

1

Вот PHP unicode regex reference. Плюс + не нужен, поскольку PHP будет проходить через строку. \s будет соответствовать всем пробельным символам.

preg_replace("![^\p{L}\p{N}\s]!", "", $search); 

Если вы хотите, чтобы соответствовать только самому пространству персонажа вы бы добавить его в скобках, как литерал:

preg_replace("![^\p{L}\p{N} ]!", "", $search); 

Update Добавлено немного о пространствах на комментарий запрос

+0

Как сохранить пространство? "" – user2178521

+0

Я добавил символ пробела '\ s'. –

+0

Thx много! действительно ценю! – user2178521

3

Хотя для java, краткий обзор here.

Вы можете использовать так называемые Posix обозначения:

[^\p{Alnum}\p{M}] 

Первый является буквенно-цифровой группы, а второй объединяющиеся диакритические знаки: акценты. Последнее нельзя забывать, так как можно написать ĉ как одну юникодную точку c-circumflex, но также как «c», за которой следует объединительный округлый ^ (нулевая ширина здесь представлена ​​нормальным обводным). В некоторых языках на базовую букву имеется более одной отметки.


Исправление:

[^\p{L}\p{N}\p{M}] 
+1

Ссылка на php для этого же: http: //www.php. net/manual/en/regexp.reference.unicode.php –

Смежные вопросы