Неверно задается диапазон в регулярном выражении [а-я]

workOnFood

Новичок
Всем доброго дня.
ОС - win7
Сервак - Денвер 3
Кодировка страницы - utf8 без бом
В корне лежит htacces с кодом - AddDefaultCharset utf-8

Пишу следующий код -

PHP:
echo setlocale(LC_ALL, 'ru_RU.CP1251', 'rus_RUS.CP1251', 'Russian_Russia.1251');
echo '<br/>';
$alf = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя';
for($i = 0;$i < strlen($alf);$i+=2){
	echo substr($alf,$i,2).' - ';
	var_dump(preg_match('/^[а-я]+$/', substr($alf,$i,2)));
	echo '<br/>';
}
получаю вывод -


Russian_Russia.1251
а - int(1)
б - int(1)
в - int(1)
г - int(1)
д - int(1)
е - int(1)
ё - int(0)
ж - int(1)
з - int(1)
и - int(1)
й - int(1)
к - int(1)
л - int(1)
м - int(1)
н - int(1)
о - int(1)
п - int(1)
р - int(0)
с - int(0)
т - int(0)
у - int(0)
ф - int(0)
х - int(0)
ц - int(0)
ч - int(0)
ш - int(0)
щ - int(0)
ъ - int(0)
ы - int(0)
ь - int(0)
э - int(0)
ю - int(0)
я - int(1)


Почему не все буквы русского алфавита верно обрабатываются preg_match()?
 

workOnFood

Новичок
Намек понял) Поменял кодировку страницы на ANSI - "ё" по прежнему вне закона почемуто(
 

workOnFood

Новичок
Ясно. Спасибо за помощь.
Однако осталась проблемка, мне нужно все-же чтобы страница была в utf-8.
Пишу -
PHP:
echo setlocale(LC_ALL, 'Russian_Russia.65001');
echo '<br/>';
$alf = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя';
for($i = 0;$i < strlen($alf);$i+=2){
	echo substr($alf,$i,2).' - ';
	var_dump(preg_match('/^[а-я]+$/', substr($alf,$i,2)));
	echo '<br/>';
}
Вывод такой же как в первом сообщении.
Помогите пожалуйста еще в этом моменте разобраться плз.
 

MiksIr

miksir@home:~$
preg_match('/^[а-я]+$/u', ...
Юникод нужно отдельно обозначать в регекспах флагом
 

workOnFood

Новичок
оО Спасибо, сам бы долго перебирал все возможные и невозможные варианты прежде чем начал бы грешить на регулярку.
 
Сверху