Нужна помощь в правильном написании регулярного выражения

GorYa

Хранитель порядка
Регистрация
11 Ноя 2014
Сообщения
377
Реакции
1.077
Использую регулярное выражение для замены не алфавитных и не цифровых значений при загрузке файлов для проверки и изменений в названии, но почему то название "моя работа" выражение обрезает до "_работа", с английскими словами все отлично. Подскажите что я неправильно написал?
Код:
$filename = preg_replace('#[^a-zA-Z0-9а-яА-ЯёЁ_\-\.]#u', '_', $filename);

u-используется как обозначение кодировки, так как без него русские символы в виде кракозябр
 
Последнее редактирование:
Спасибо, но буду рад если подскажете, что именно не хватает или лишнее. С английскими именами все ок, с русскими есть проблема только в том, что если слов несколько и между ними пробелы, то почему то пропадает только первое слово, вместо пробелов идут _. Код ведь правильный, в чем тогда ошибка
 
Спасибо, но буду рад если подскажете..
В своё время, когда только начинал изучать PHP, я принял волевое решение использовать только UTF-8, для меня это казалось тёмным лесом, но ничуть об этом не жалею.
Попробуйте прописать абвгдеёжзиёклмнопрстуфхцчшщьъыэюяАБВГДЕЁЖЗИЁКЛМНОПРСТУФХЦЧШЩЬЪЫЭЮЯ, если заработает, то копайте в сторону старой версии PHP или устанавливайте кодировки там где нужно.
В ссылках что я дал выше, кое что есть по теме, только внимательно прочитать. Направление я вам задал, дальше сами.
 
Спасибо. Такого вида переменные я использую в некоторых компонентах, когда есть проблема с отображением времени и языка, на счет вашего варианта я думал, попробую обязательно. Версия php в настоящее время 5.5.9
 
С регулярочками хорошо по началу работать с сервисом Для просмотра ссылки Войди или Зарегистрируйся методом научного тыка.
Вверху регулярку, ниже строку на поиск, и он в ней подсветит то, что регулярка обрабатывает
 
С регулярочками хорошо по началу работать с сервисом Для просмотра ссылки Войди или Зарегистрируйся методом научного тыка.
Вверху регулярку, ниже строку на поиск, и он в ней подсветит то, что регулярка обрабатывает

Посмотрел, лично для меня это сложновато уже на этапе что куда писать. НО выражение точно рабочее, проверено вручную.
Спрошу тогда другой вопрос. Необходимо регулярное выражение для проверки валидации через php код.
Задача: человек загружает файл с названием на русском или английском языке, но проверка не дает ему приложить файл имеющий русские символы в названии, только файлы с именем латиницей, пока написал так, может кто то сможет сказать правильно или нет:

Код:
if( ! preg_match(('#[^a-zA-Z0-9_\-\. ]#', $filename)));
 
PHP:
// i - не учитывать регистр
if(preg_match('#[^a-z0-9_\-\. ]#i', $filename)) echo "содержится бяка";
И да, сайт выше тебе бы не помог. Хотя я и не смотрел что там.
 
Для просмотра ссылки Войди или Зарегистрируйся, выражение рабочее в 5.5.9, ошибок нет. Проверь этот минимальный скрипт.
Код:
<?php
$filename = 'моя работа';
$filename = preg_replace('#[^a-zA-Z0-9а-яА-ЯёЁ_\-\.]#u', '_', $filename);
die($filename);
 
в общем setlocal в моем случае не работает, да в принципе мне и регулярным выражением все удалось решить с русскими буквами, но проблема основная в том что почему то в словосочетаниях, например "моя работа", он обрезает и оставляет "_работа", с английскими словосочетаниями такого нет. Выкладываю полный код касающийся функций

Код:
public function cleanName($filename, $repeatCounter)
    {
        // Replace any non-alphanumeric chars (except _ and - and .) with _
        $filename = preg_replace('#[^а-яА-ЯёЁ0-9a-zA-Z_\-\.]#u', '_', $filename);
        $this->randomizeName($filename);

        return $filename;
    }
 
Последнее редактирование:
Назад
Сверху