Regex, чтобы отклонить неанглийские символы? - PullRequest
2 голосов
/ 11 января 2011

Существует ли простое регулярное выражение, которое будет перехватывать все неанглийские символы?Это должно было бы разрешить обычные знаки препинания и символы, но не специальные символы, такие как русский, японский и т. Д.

Ответы [ 5 ]

2 голосов
/ 11 января 2011

Поскольку в вашем комментарии вы ссылаетесь на адреса, они тоже могут содержать цифры.Итак:

preg_replace('/[^[:alpha:][:punct:][:digit:]]/u', utf8_encode($input), '');

Должен заменить ваших нежелательных персонажей.Класс [:alpha:] будет работать, только если ваш языковой стандарт настроен правильно.Например, если для него установлено значение de_DE, считаются не только символы от «а» до «z», но также такие «экзотики», как «ä», «ö», «è» и т.п.

Кроме того, поскольку вам не нужны «русские, японские и т. Д.», Обратите внимание на модификатор u.Вход должен быть в кодировке UTF-8, чтобы не сломать его и дать неверные результаты.

0 голосов
/ 11 февраля 2013
if (strlen($str) == strlen(utf8_decode($str))) {

}
0 голосов
/ 21 января 2011

использовать шестнадцатеричные коды , например, при этом удаляются все не-ascii символы, а также окончания строк, и заменяются их пробелами.пробел (\x20) намеренно исключен из диапазона, поэтому последовательные пробелы и / или специальные символы заменяются одним пробелом.

$clean = trim(preg_replace('/[^\x21-\x7E]+/', ' ', $input));
0 голосов
/ 11 января 2011
0 голосов
/ 11 января 2011

Как этот [^ A-Za-z0-9 \, \. \ -]?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...