Q:

Регулярное выражение не пропускает половину кириллицы

Здравствуйте. У меня вконец съехала крыша, не могу понять, что происходит.
Имеется код, например:
<?php
$name = "а";
if(!preg_match('/^[а-я]*$/i', $name))
    echo 'неок!';
else
    echo 'ок!';
?>

так вот. если в переменной $name находятся символы [а-о] кириллицы, то регулярка их ПРОПУСКАЕТ. А если присутствуют символы дальше ([п-я]) - не пропускает. Никак не могу понять, что происходит.
Кодировка файла - utf-8
В .htaccess прописана utf-8
В браузере настроена utf-8 даже

помогите, никак не могу понять, что за фигня, уже раз 35 побился головой об стену.
UDP  спасибо, по юникоду понял. а если я работаю с cp1251? там вылазит та же проблема.

A:

Работаете с юникодом? Добавьте флаг /u и будет вам счастье. Плюс для кириллицы флаг /i не работает и вы забыли букву Ё.  
<?php
$name = "а";
if (!preg_match('/^[а-яА-ЯёЁ]*$/u', $name)) {
    echo 'неок!';
} else {
    echo 'ок!';
}
?>

update: пардон, относительно флага /i ошибся. С кодировкой что-то не то было.

