Задать вопрос
Dasha_Opozdasha
@Dasha_Opozdasha

Почему preg_replace не работает, если в регулярном выражении указан модификатор?

Есть строка: 'qw123`!@#$^&*I)&)%*#^_)*)^* $^@%$&-_&%&*#^zxЛО ---Лcd - asd asd '
Нужно чтобы на выходе эта строка выглядела вот так: qw123-I-zxЛО-Лcd-asd-asd.
Есть код:
$output = trim(preg_replace('/([^\w]+|[\_])+/', '-',strtolower($temp)), '-');
выводит эту строку вот так: qw123-i-zx�-�-�-cd-asd-asd
Есть модификатор для регулярок u. Но если его использовать в функции preg_replace ничего не выводит вообще. Помогите пожалуйста.
  • Вопрос задан
  • 550 просмотров
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 1
Dasha_Opozdasha
@Dasha_Opozdasha Автор вопроса
в общем проблема была в функции strtolower. Она не понимает кириллицу. Если использовать mb_strtolower и указывать кодировку все работает.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
AlexMaxTM
@AlexMaxTM
Если в исходной строке есть UTF-8, то \w работать не будет. Нужно либо писать так:
'/^([а-яА-ЯЁёa-zA-Z0-9_]+)$/u'
Либо использовать функции РНР:
mb_ereg
mb_ereg_match
mb_regex_encoding
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
IT ATLAS Москва
от 250 000 до 500 000 ₽