2011-01-10 3 views
2

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

Ищете что-то для работы на PHP.

+0

Почему ты хотел ограничиться английскими символами, но чтобы все punctuation‽ Вы действительно хочет ограничить ввод в ASCII символов? –

+1

Возможно, связано с http://stackoverflow.com/questions/4619603/php-validate-string-characters-are-uk-or-us-keyboard-characters/4619747 –

+0

@Anon - имена и адреса обычно включают апострофы, запятые, периоды и т. д. Хотите нормализовать данные, чтобы все было на английском языке. –

ответ

0

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

+1

Вы имеете в виду a-z, а не a-b, правильно? – CanSpice

+2

Habe fun with '" Я нарушаю ваше регулярное выражение. ". – delnan

+1

'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''' '' '' '' '' '' '' '' '' '' '' '' '' ' Конечно, не ',' так как он не имеет особого значения в regex. –

2

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

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

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

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

0

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

$clean = trim(preg_replace('/[^\x21-\x7E]+/', ' ', $input)); 
-1
if (strlen($str) == strlen(utf8_decode($str))) { 

} 
+0

Не знаете, как это реально решает поставленную проблему. Некоторые объяснения были бы приятными. –

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