Проблемы с юникодом при обработке регулярными выражениями

Opik

Новичок
Проблемы с юникодом при обработке регулярными выражениями

Есть задача проверить строку на содержание русского/латинского алфавита, т.е строка должна быть либо в одном алфавите, либо в другом:
PHP:
	if(preg_match("/[^a-zA_Zа-яА-Я0-9-_\s]/U", $string))
 	{
 		print "bad";
 	}
 	else
 	{
                print "good";
 	}
Латинский алфавит проходит нормально, кириллица же ругается (bad), проблем до перехода на UTF не было.
P.S ФАК смотрел, модификатор u пробовал.
 

WP

^_^
Не понял, т.е. либо должна быть латиница и не должно быть кириллицы, либо наоборот?
Я бы решил эту задачку двумя вызовами preg_match либо если набор остальных символов ограничен - одной с альтернативой в виде двух выражений.
 

Opik

Новичок
WP
Да, вы правильно все поняли, пробовал и двумя preg_match, но при проверке на латиницу (вводя русские буквы) откуда то идет совпадение - т.е получается аналогичная ситуация
 

Opik

Новичок
Kirill
Читаем внимательнее, модификатор u я пробовал
 

Scud

Новичок
А вот эти "а-яА-Я" они в самом скрипте в какой кодировке написаны?
 

Scud

Новичок
1. раз UTF-8, то /u полюбому
2. в примере между A и Z подчеркивание, а не дефис - опечатка?
Код:
if(preg_match("/(?:^[a-zA-Z0-9-_\s]*$)|(?:^[а-яА-Я0-9-_\s]*$)/u", $string))
{
	print "good";
}
else
{
	print "bad";
}
Может так?

p.s. Буква 'ё' в диапазон не попадает.
 

Opik

Новичок
Scud
1) Согласен
2) М... опечатка...
3) Да, помогло, работает, спасибо...
но тогда другой вопрос - почему раньше работало? Главный вопрос решен, сейчас же ради того, что бы стало понятно :)
 

Opik

Новичок
kamatoz
я знаю, когда в первом посте я писал про u, я писал именно про маленькую u (UTF)
 
Сверху