Форум программистов, компьютерный форум, киберфорум
PHP: RegExp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/86: Рейтинг темы: голосов - 86, средняя оценка - 4.63
52 / 52 / 4
Регистрация: 10.11.2010
Сообщений: 171

Регулярные выражения + UTF-8

03.01.2011, 10:59. Показов 17936. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, программисты.

Возникла проблема. Использую регулярные выражения для проверки введенных пользователем данных, так вот. Необходимо, чтобы информация в одном из полей содержала русские и/или английские буквы. С английскими все в порядке. А вот с русскими у меня проблема. Скрипт не понимает, что буквы: "ё", "ц", "ш" (даже "р") - русские.

Вот регулярка:

PHP
1
preg_match('/^[a-zа-я0-9]+$/i', $field))
В чем может быть проблема и как ее решить?

P.S. Точно не уверен, но русский алфавит, вроде, не урезали )
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.01.2011, 10:59
Ответы с готовыми решениями:

ЧПУ. Замена строк, регулярные выражения. Как правильно использовать переменную в регулярные выражения ?
Здравствуйте! Решил реализовать ЧПУ на своем сайте. Первый этап это замена всех реальных ссылок на чпу ссылки. Так вот при замене я...

Регулярные выражения
Привет всем! Имеется следующий код $str = '<select name="cat" style="width:300px;"><option value="0">Все...

Регулярные выражения.
Нужно вытащить все, находящееся между "мп3-дисков" и "top100.rambler.ru/top100". Подскажите, два года с regexp не работал...начинать...

8
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
03.01.2011, 11:06
Весь PHP код в UTF-8. Модификатор u (не путать с U)
PHP
1
var_dump(preg_match('/[а-я]+/u', 'foo тест bar', $m), $m);
1
52 / 52 / 4
Регистрация: 10.11.2010
Сообщений: 171
03.01.2011, 11:16  [ТС]
Да, спасибо, как то я не обратил внимание, что существует подобный модификатор. Проблема с буквой ё, Ё - осталась. В принципе, можно дописать ее в шаблон: ёЁ. Есть ли еще буквы, которые следует "дописать"?
0
Почетный модератор
 Аватар для Humanoid
11551 / 4346 / 452
Регистрация: 12.06.2008
Сообщений: 12,452
03.01.2011, 11:42
Цитата Сообщение от LinelWorld Посмотреть сообщение
Проблема с буквой ё, Ё - осталась. В принципе, можно дописать ее в шаблон: ёЁ. Есть ли еще буквы, которые следует "дописать"?
Эта UTF-8 вообще странно как-то сделана... похоже, что она основывалась на CP866. Там буквы идут по очереди от "А" до "Е" (от 208,144 до 208,149) но буква "Ё" - это символы 208,129... а с буквы "Ж" до "Я" опять идут по порядку (208,150 - 208,175).
А маленькие буквы вообще как-то странно идут. "а"-"е" подряд (208,176 - 208,181), буква "ё" отдельно (209,145)... "ж"-"п" опять идут подряд (208,182 - 208,191). А "р" - "я" уже в другом диапазоне (209,128 - 209,131). Такая же история была в ДОСовской кодировке CP866... там между "п" и "р" были символы, с помощью которых рисовались таблицы. Непонятно, зачем в новой кодировке это сделали так же.
0
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
03.01.2011, 11:49
Humanoid, В юникоде А-Яа-я идут подряд u0410-u042F,u0430-u044F, Ё = u0401, ё = u0451. А UTF-8 - это ж просто способ представления/кодирования юникода.
0
Почетный модератор
 Аватар для Humanoid
11551 / 4346 / 452
Регистрация: 12.06.2008
Сообщений: 12,452
03.01.2011, 12:26
Vovan-VE, а сам preg_match ориентируется на юникодовские значения или на то, что прочитал из файла - utf8 ?
0
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
03.01.2011, 12:37
Цитата Сообщение от Humanoid Посмотреть сообщение
а сам preg_match ориентируется на юникодовские значения или на то, что прочитал из файла - utf8 ?
Конечно на юникод. Иначе от него толку было бы мало.
PHP
1
var_dump(preg_match('/[\\x{0410}-\\x{044F}]+/u', "foo АбвГд bar", $m), $m);
2
52 / 52 / 4
Регистрация: 10.11.2010
Сообщений: 171
03.01.2011, 16:43  [ТС]
Я извиняюсь, что вмешиваюсь Кроме буквы Ё, все буквы русского алфавита подходят под определение [а-я]?

И еще вопрос. Модификатор "i" делает выражение не чувствительным к регистру, т.е. я правильно понимаю, что:

'/^[a-яА-Я]$/' = '/^[a-я]$/i' ?
0
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
03.01.2011, 17:14
LinelWorld, да, /[а-яё]/iu - будет соответствовать одной любой русской букве в юникоде (UTF-8). Только не забывайте про модификатор u .

Добавлено через 10 минут

Не по теме:

PS: Кстати, в других киррилических языках есть еще некоторые кириллические буквы. Если вдруг кроме русского языка еще какой понадобится. :)

1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.01.2011, 17:14
Помогаю со студенческими работами здесь

Регулярные выражения
Составить регулярное выражение, является ли заданная строчка IP адресом, записанным в десятичном виде. Ребят, помогите, вообще регулярки...

Регулярные выражения
Есть строка +1,2+1,1+2,3 .... Берёться из базы данных. Нужно её обработать чтобы получилось чтото такое razdel = 1; cat = 2; ...

Регулярные выражения
$pattern = "()"; как доработать паттерн, чтобы регулярка реагировала и на пустое место,а не только на символы, отличные от цифр,...

регулярные выражения
Создайте сценарий php-3-01.php, переменной $data присвойте значение "Онегину нравился Байрон, поэтому он и повесил его над кроватью."....

Регулярные выражения
Написал небольшой код для вытягивания данных из <meta name="keywords" content="засор, канализация, устранение засоров, прочистка...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru