2014-09-18 7 views
3

Можно ли это сделать с помощью ICU, не возвращаясь к регулярному выражению?ICU: Транслитерировать, а затем удалять все несимвольные символы

В настоящее время я нормализуют имена файлов, как это:

protected function normalizeFilename($filename) 
{ 
    $transliterator = Transliterator::createFromRules(
     'Any-Latin; Latin-ASCII; [:Punctuation:] Remove;' 
    ); 
    $filename = $transliterator->transliterate($filename); 
    $filename = preg_replace('/[^A-Za-z0-9_]/', '', $filename); 
    return $filename; 

} 

Могу ли я избавиться от регулярного выражения здесь и делать все с ICU звонки?

+0

Всего 50? Этот вопрос раздувает умы, а потом только 50? сделайте это 200 ..... – UltraDEVV

+0

@UltraDEVV Я сомневаюсь, что повышение награды увеличит число программистов, которые знают ответ;) –

ответ

4

Используйте правильный инструмент для работы

Я не вижу ничего плохого в том, что вы делаете сейчас.

ICU транслитерация - в первую очередь язык предназначенный. Он пытается сохранить смысл.

Регулярные выражения, с другой стороны, могут манипулировать символами подробно, что дает вам уверенность в том, что имя файла ограничено выбранными символами.

Комбинация совершенна, в данном случае.

Я, конечно же, искал решение вашего вопроса. Но, честно говоря, я не мог найти что-то, что будет работать на всех возможных входах.

Например, не все символы, мы будем рассматривать знаки препинания, удаляются [:Punctuation:] Remove;. Попробуйте русское название: Корнильев, Кирилл. После применения вашего id он будет: Kornilʹev Kirill. Очевидно, что это не знак препинания, но вы не хотите его в имени файла.

Так что я бы посоветовал использовать правильный инструмент для работы:

  1. Используйте ICU, чтобы получить лучший ASCII enquivalent. Только используя Latin-ASCII;, как это делает id. Ницца и просто.
  2. Затем используйте регулярное выражение, как и вы, чтобы убедиться, что у вас остались только те персонажи, которые вам нужны.

В этом нет ничего плохого.

PS: Лично я считаю, что человек или лица, написавшие руководство пользователя ICU, не должны дополняться хорошо выполненной работой. Какой беспорядок.