Обработка телефонных номеров в InDesign

Начать пользоваться регулярными выражениями в InDesign — как заменить простую волшебную палочку на карбоновую: и было-то хорошо, а теперь еще +100 к надежности.

Говоря формально, название GREP в диалоговом окне Find/Change InDesignʼа не совсем верно и больше похоже на дань моде «на иксы» (напомню, что macOS, ранее известная как OS X, имеет прямое отношение к UNIX). В мире UNIX и подобных ей систем grep — отдельная утилита, работающая с регулярными выражениями, существует аж с 1974 года. Правильнее было бы назвать этот пункт диалога как-нибудь вроде RegExp, поскольку смысл именно в этом — находить и заменять текст, используя специальный язык. Примерно также, как это делает grep.

И еще одно отступление — в рамках небольшой заметки изложить все нюансы использования регулярных выражений нереально, она посвящена одному прикладному моменту. С другой стороны, изучение «регэкспов» титанических усилий не потребует, зато позволит манипулировать словами с невиданной доселе легкостью. Настоятельно рекомендую в целом, а в частности — вот ссылка на книжку «GREPоводство», где все очень хорошо рассказано и как раз применительно к InDesign. Оттуда, кстати, я и позаимствовал первоначальный образец шаблона.

Переходя к сути вопроса — если не обеспечить жесточайший контроль при записи телефонных номеров, например, с помощью целого ряда проверок, спрятанных в web-интерфейс, люди вытворяют совершенно фантастические вещи. Выдай в организацию электронную таблицу с просьбой вбить данные для визиток и получишь назад такое, что остается лишь руками развести. Сколько не объясняй, на выходе всё равно будут номера со слепленными цифрами, группами цифр, отделенными точками (на манер ip-адресов) или какие-то непонятные формулы. Может быть, несчастные номера должны отображать яркую индивидуальность владельца? И если таких человек двести-триста, а у вас до наступления почтенной старости были еще и другие дела, поинтереснее? Единственный способ справиться с неприятностью за полчасика — регулярные выражения.

Вот «магический» шаблон для закладки GREP в окне поиска/замены InDesign.

Find (найти): [^0-9]?[7|8]?[^0-9]?(\d)[^0-9]?(\d{3})[^0-9]?(\d{2})[^0-9]*?(\d{2})
Change (заменить): +7 ($1) $2-$3-$4

диалоговое окно поиска и замены в InDesign

Стоит помнить, что регулярные выражения не зря называют read-only — писать их проще, чем разбираться в уже написанных :) С «начинкой» шаблона find поможет книжка, упомянутая выше.

Обратим внимание на change — получив нужные группы с помощью регулярного выражения, можно их форматировать любым нужным способом. Например, сейчас шаблон replace приводит номера к виду  +7 ($1) $2-$3-$4. Я пометил цветом те символы, которые можно безболезненно редактировать или даже удалить.

Возвращаясь к нашей задаче — иллюстрация «до и после» поиска/замены. «Ну что ж, все в порядке» ©

результат
Примечание

шаблон рассчитан на обработку одного номера, окруженного текстом (вроде «тел.:» и прочего) — обычно так удобнее. А для такой колонки, как на картинке выше, нужно будет добавить еще поиск перевода строки, например, так:

Find (найти): [^0-9]?[7|8]?[^0-9]?(\d)[^0-9]?(\d{3})[^0-9]?(\d{2})[^0-9]*?(\d{2})(~b)
Change (заменить): +7 ($1) $2-$3-$4$5

Метки: ,