Baranov_Dron
Новичок
регулярные выражения и locale
Я жутко что-то пристал к регуляркам. Практически мне не нужно. Просто интересно.
Я работаю только с cp1251.
Накалякал следующий пример кода
На домашнем компьютере(windows, php5.2.5) выполнился как:
Результаты:
Домашний:
Вопрос в том, как объяснить происходящее?
P.S. использовал поиск
на этом форуме запросы: "locale регулярные выражения", "ошибка alpha" + гугл
alpha и буква р site:http://phpclub.ru/
[а-я] и буква ё site:http://phpclub.ru/
чёрт боюсь опять плохо искал((( если так, то укажите пожалуйста по какому запросу искать!
Я жутко что-то пристал к регуляркам. Практически мне не нужно. Просто интересно.
Я работаю только с cp1251.
Накалякал следующий пример кода
PHP:
<?
$bykvy = array(
"А", "Б", "В", "Г", "Д", "Е", "Ё", "Ж", "З", "И", "Й",
"К", "Л", "М", "Н", "О", "П", "Р", "С", "Т", "У", "Ф",
"Х", "Ц", "Ч", "Ш", "Щ", "Ъ", "Ы", "Ь", "Э", "Ю", "Я",
"а", "б", "в", "г", "д", "е", "ё", "ж", "з", "и", "й",
"к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф",
"х", "ц", "ч", "ш", "щ", "ъ", "ы", "ь", "э", "ю", "я"
);
$locales = array("ru_RU.CP1251",
"ru_RU.cp1251",
"Russian_Russia.1251",
"ru_RU",
"ru");
foreach ($locales as $locale)
{
$rr = setlocale(LC_CTYPE, $locale);
echo "<p>Локаль: ".$locale." "; var_dump($rr);
if($rr)
{
$err = "";
echo "Найдены буквы:<p>";
foreach($bykvy as $b)
{
if(preg_match("!^[[:alpha:]]{1}$!", $b, $res))
{
echo $b." ";
}
else
{
$err[] = $b;
}
}
if($err)
{
echo "<p>Не найдены буквы:<p>";
foreach($err as $b)
{
echo $b." ";
}
echo "<p>";
}
}
else
{
echo "не установлена:(<p>";
}
}
?>
На линукс хостинге(php 5.2.6)Локаль: ru_RU.CP1251 bool(false) не установлена
Локаль: ru_RU.cp1251 bool(false) не установлена
Локаль: Russian_Russia.1251 string(19) "Russian_Russia.1251" Найдены буквы:
А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я
Локаль: ru_RU bool(false) не установлена
Локаль: ru bool(false) не установлена![]()
Решил изменить регулярное выражение на !^[а-яА-Я]{1}$!Локаль: ru_RU.CP1251 bool(false) не установлена
Локаль: ru_RU.cp1251 bool(false) не установлена
Локаль: Russian_Russia.1251 bool(false) не установлена
Локаль: ru_RU string(5) "ru_RU" Найдены буквы:
А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я а б в г д е ё ж з и й к л м н о п с т у ф х ц ч ш щ ъ ы ь ю я
Не найдены буквы:
р э
Локаль: ru bool(false) не установлена![]()
Результаты:
Домашний:
хостинг: тот же результат!!!Локаль: ru_RU.CP1251 bool(false) не установлена
Локаль: ru_RU.cp1251 bool(false) не установлена
Локаль: Russian_Russia.1251 string(19) "Russian_Russia.1251" Найдены буквы:
А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я а б в г д е ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я
Не найдены буквы:
Ё ё
Локаль: ru_RU bool(false) не установлена
Локаль: ru bool(false) не установлена![]()
Вопрос в том, как объяснить происходящее?
P.S. использовал поиск
на этом форуме запросы: "locale регулярные выражения", "ошибка alpha" + гугл
alpha и буква р site:http://phpclub.ru/
[а-я] и буква ё site:http://phpclub.ru/
чёрт боюсь опять плохо искал((( если так, то укажите пожалуйста по какому запросу искать!

