Одна и та же регулярка выдаёт разные результаты.

В kohana v2 в Valid_Core-классе есть метод, который проверяет что, в строке есть буквы, цифры и "-":
PHP:
	public static function alpha_dash($str, $utf8 = FALSE)
	{
		return ($utf8 === TRUE)
			? (bool) preg_match('/^[-\pL\pN_]++$/uD', (string) $str)
			: (bool) preg_match('/^[-a-z0-9_]++$/iD', (string) $str);
	}
Я им так проверяю логины пользователей. На тестовом серваке всё работало, залил на рабочий - стало выдавать другой результат, что типа "vaska" не удовлетворяет условию. Ну не мудрствуя лукаво написал следующий код:
PHP:
setlocale(LC_ALL, 'en_US.utf8');
$utf    = (bool) preg_match('/^[-\pL\pN_]++$/uD', (string) "vaska");
$nonUtf = (bool) preg_match('/^[-a-z0-9_]++$/iD', (string) "vaska");
var_dump(array(
    'locale'  => setlocale(LC_ALL, 0),
    'utf'     => $utf,
    'non_utf' => $nonUtf
));
Результат выполнения на тестовом:
PHP:
array(3) {
  ["locale"]=>
  string(10) "en_US.utf8"
  ["utf"]=>
  bool(true)
  ["non_utf"]=>
  bool(true)
}
На рабочем:
PHP:
array(3) {
  ["locale"]=>
  string(10) "en_US.utf8"
  ["utf"]=>
  bool(false)
  ["non_utf"]=>
  bool(true)
}
В чём может быть проблема ?
 

DiMA

php.spb.ru
Команда форума
Помести все нужные символы в символьный класс и проверяй
[....]
 

zerkms

TDD infected
Команда форума
DiMA
А не лучше ли разобраться в причинах?

Вася Патриков
У меня, кстати, отдаётся
PHP:
array(3) { ["locale"]=> string(10) "en_US.utf8" ["utf"]=> bool(true) ["non_utf"]=> bool(true) }
 
Сверху