Синтаксис шаблонов

 

Сервисы Общения Форумы Телефония Синтаксис шаблонов

В этой теме 17 ответов, 4 участника, последнее обновление  Dominique 3 года/лет, 4 мес. назад.

Просмотр 18 сообщений - с 1 по 18 (из 18 всего)
  • Автор
    Сообщения
  • #8983

    Adams
    Участник

    Добрый день.

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

    /^7[2-3,8]/ Всё, что начинается с 72,73,78.
    Хотелось бы иметь большую свободу в установке значений. Например, чтобы можно было задать не только 72,73,78, но и 750-755,760 и т.д. То есть шаблон такого вида: /7[2-3,8,50-55,60]%/

    /^s#(\d{6,10})$/ Всё, что начинается с ‘s#’ и состоит из 6-10 цифр
    Можно сделать так: Всё, что начинается с ‘s#’ и состоит из 4,6-10 символов: /s#(d{4,6-10})/
    а если надо задать только то, что начинается с ‘s#’ и состоит из 5 символов, то писать так: s#??? где ? заменяет любой символ
    если просто задать любой номер длиною в 5 символов, то написать так /(d{5})/ или ?????

    /^749[589](\d{7})$/ заменить на $1 Остаются только последние 7 цифр
    можно упростить до /749[5,8,9](d{7})/ если нужно взять первые 7 символов, то написать /%(d{7})/ если последние 7, то так: /(d{7})%/

    Ещё очень хотелось бы иметь возможность задавать несколько шаблонов в одном правиле, например:
    /7[3,87,920-929]%/,/11(d{6-10})$/,00%,????
    конечно, если потребуется использование замены, то в любом случае придётся разделять правила, но когда стоит задача просто направить ряд направлений через конкретную учётную запись, то это избавит от необходимости создавать целую кучу однотипных правил.

    #8986

    Dominique
    Участник

    Если не секрет, откуда взяты эти примеры?

    #8989

    Saymer
    Участник

    Регулярные выражения можно проверять, например, здесь https://regex101.com/
    Если в них разобраться, то они довольно удобные и не такие сложные, как могут показаться в начале.

    Некоторые примеры так же есть здесь https://talk37.ru/helpme/%D1%81%D1%82%D0%B0%D1%82%D1%8C%D0%B8/%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-%D0%B8%D1%81%D1%85%D0%BE%D0%B4%D1%8F%D1%89%D0%B8%D1%85-%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB

    Или вот, для звонков на Мегафон МСК кроме просто для общения
    /^792[5,6](\d{7})$/
    /^7929[5,6,9](\d{6})$/
    /^749[5,8,9](\d{7})$/

    Если разобраться в регулярных выражениях, можно написать любое правило. Разобраться в них можно, если изучить принцип работы.

    #8991

    Adams
    Участник

    Если не секрет, откуда взяты эти примеры?

    Внизу страницы “Правила исходящих”.

    Если разобраться в регулярных выражениях, можно написать любое правило. Разобраться в них можно, если изучить принцип работы.

    Ими пока и пользуюсь. Просто предложенный мною вариант более простой и понятен даже особо не разбираясь в принципах, т.е. интуитивно понятен (относительно) 🙂

    Или вот, для звонков на Мегафон МСК кроме просто для общения
    /^792[5,6](\d{7})$/
    /^7929[5,6,9](\d{6})$/
    /^749[5,8,9](\d{7})$/

    В моём примере, если длина номера 11 цифр, это можно было бы записать как /7[925,926,9295,9296,9299,495,498,499](d{11})/, либо если допустить вложения, то будет так: /7[92[5,6,95,96,99],49[5,8,9]](d{11})/. Если реализовать вариант с вложениями, то это бы очень сильно сократило длину шаблонов.

    #8993

    Dominique
    Участник

    А какие раньше были простые шаблоны у Астериска… Например:

    _[2-79]XXXXXX – любой семизначный номер, начинающийся на любые цифры, кроме 0, 1 и 8;
    _8495[2-79]XXXXXX - то же самое с префиксом;
    _91[0567]XXXXXXX - номера МТС из 10 цифр;
    _0049X. - любые номера в Германии;
    _00ZX. - любые международные звонки с заранее неизвестной длиной номера

    #8994

    Adams
    Участник

    Я просто постарался сильно не менять логику шаблонов и сконструировать “упрощённую” версию на базе того, что уже есть, но которую можно будет легко понять без долгого изучения синтаксиса.

    P.S. Кстати, я в своём примере /7[3,87,920-929]%/,/11(d{6-10})$/,00%,???? допустил ошибку, правильно будет так /7[3,87,920-929]%/,/11(d{6-10})/,00%,????

    #9002

    Demon
    Участник

    Тему нужно разделить на две части и дам своё текущее видение по ним:
    1. указание нескольких шаблонов (через запятую) в одной строке. Да, это нужно. Конечно согласен. Сейчас возможно указать несколько шаблонов только “простых” (т.е. с указанием %). Планирую реализовать указание списка любых шаблонов, в том числе с заменой.

    2. Изменение формата шаблонов, новые форматы шаблонов.
    Сейчас есть два формата:
    а) простой с символом подстановки “%”. Ну тут вряд ли кто против такого
    б) регулярные выражения. Не стоит изобретать нового… незнакомого людям. Указание символов ^ в начале и $ в конце – это часть регулярного выражения. Их можно опускать… но тогда смысл выражения меняется. Если человек знает регулярное выражение, то он им воспользуется. Если не знает.. то лучше уж узнает “правильное” построение выражения, чем очередное кривое колесо.

    Добавить новый формат из астериска… начинающийся с “_” (в примерах @dominique), наверное, можно. Он хорошо описывает числовые номера… количество чисел и в том числе диапазоны номеров. Но он как и регулярные выражения позиционный шаблон, а не такой чтобы 920-929 или 925,926. Все известные мне шаблоны рассматривают цифры, а не числа.

    #9003

    Dominique
    Участник

    @demon “Цифры, а не числа” – это как? Может, имелось в виду “символы, а не цифры”?
    Дело в том, что нецифровые SIP ID вообще имеют довольно ограниченное применение, фактически они только для “внутрисетевого” общения, как и логины Skype. На них например нельзя позвонить с донабором из PSTN, и соответственно они же не могут быть переданы туда в качестве Caller ID. Т.е. на данный момент это скорее баловство, и не уверен, что нужно ради него так сильно усложнять синтаксис всех шаблонов.

    #9004

    Demon
    Участник

    41 – две цифры и одно число 🙂 Ну и да… два символа.
    О позиционности шаблона я говорил что он оперирует цифрами (ну или символами), а не числами (как предлагалось выше).
    А по поводу ограниченности применения – АТС должна работать не только с сотовыми или ТФОП.. звонки в скайп или другие сип сети точно так же допустимы и должны должным образом обрабатываться. Иначе как бы Вы настроили звонки на свою АТС? 🙂

    #9007

    Adams
    Участник

    А если просто сделать альтернативный вариант шаблонов? Который, например, как говорили выше, будет начинаться с “_” и там уже сделать простой синтаксис, типа того, что я описал, который будет понятен и прост. А дальше уже люди сами решат, что выбрать стандартизированные шаблоны или упрощённые. Можно даже сделать простенькое голосование, чтобы посмотреть как много людей хотели бы иметь возможность работы с упрощённым синтаксисом, а кто за стандартные шаблоны. Если выяснится, что всем нравятся те шаблоны, что есть, тогда конечно не стоит ничего менять из-за 2-3 человек, но если таких людей много, то стоит хотя бы рассмотреть возможность внедрения альтернативных шаблонов.

    #9009

    Demon
    Участник

    Заморочился… и создал regexp, который разбирает комму разных шаблонов
    regexp: (?|\s*(?|(?|(\/)([^\/]*)[\/]|(_)([^,=]+)|()([^,=]+))(?(?==)\=([^,]+)))\s*,?)+?
    /test[2],[e] tes/, /eq we/=$2, dghg,hui hghgh=daa,_9XXXX
    проверялось на /test[2],[e] tes/, /eq we/=$2, dghg,hui hghgh=daa,_9XXXX
    тут: https://regex101.com/r/fL3gD2/2

    это для себя… чтобы не потерялось 🙂

    #9019

    Demon
    Участник

    Вроде бы реализовал возможность указания нескольких правил в одной строке через запятую. В том числе с заменой. В исходящих правилах значение замены переехало из отдельного поля в сам шаблон (через знак “=”).
    Внимание! Выполняются ВСЕ правила через запятую последовательно!
    Пример:
    шаблон 1%=2%,2%=3%,3%=4%
    номер 1111 в результате будет заменён на 4111.
    надеюсь.. это не станет неприятным сюрпризом.
    Сейчас буду искать ошибки… буду улучшать вывод при тестировании правил… буду подключать шаблон типа _XXX

    #9021

    Demon
    Участник

    Реализован поддержку шаблонов (паттернов) от asterisk. Вот только там нет замены… только сравнение.
    Тестируйте, сообщайте о результатах.

    #9025

    Dominique
    Участник

    Нет замены – то есть вариант _8495ХХХХХХХ заменить на _7495ХХХХХХХ не получится сделать?

    #9029

    Demon
    Участник

    А если шаблон будет _8495Х4ХХХХХ ?
    А если _849[59]ХХХХХХХ ?
    и много других вариантов…
    Единственное что могу предложить… это некоторая вариация типа _8495(ХХХХХХХ)=$1
    🙂

    #9033

    Dominique
    Участник
    А если шаблон будет _8495Х4ХХХХХ ?
    А если _849[59]ХХХХХХХ ?

    А в чём разница? Синтаксис-то один..

    Единственное что могу предложить… это некоторая вариация типа _8495(ХХХХХХХ)=$1
    Т.е. можно сделать _8(495ХХХХХХХ)=_7$1?

    #9073

    Demon
    Участник

    Теперь можно сделать, но иначе: _8(495ХХХХХХХ)=7$1
    при замене не нужен символ “_”

    #9074

    Dominique
    Участник

    Круто, попробую.

Просмотр 18 сообщений - с 1 по 18 (из 18 всего)

Для ответа в этой теме необходимо авторизоваться.