Синтаксис шаблонов
Сервисы Общения › Форумы › Телефония › Синтаксис шаблонов
- В этой теме 17 ответов, 4 участника, последнее обновление 9 лет, 3 месяца назад сделано Dominique.
-
АвторСообщения
-
21.07.2015 в 11:10 #8983AdamsУчастник
Добрый день.
Ранее уже озвучивалась идея упростить синтаксис, хотелось бы обсудить эту тему. Потому что шаблоны, в том виде в котором они сейчас, довольно сложны для понимания и в них легко запутаться.
/^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%,????
конечно, если потребуется использование замены, то в любом случае придётся разделять правила, но когда стоит задача просто направить ряд направлений через конкретную учётную запись, то это избавит от необходимости создавать целую кучу однотипных правил.21.07.2015 в 13:03 #8986DominiqueУчастникЕсли не секрет, откуда взяты эти примеры?
21.07.2015 в 15:25 #8989SaymerУчастникРегулярные выражения можно проверять, например, здесь 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})$/Если разобраться в регулярных выражениях, можно написать любое правило. Разобраться в них можно, если изучить принцип работы.
21.07.2015 в 16:29 #8991AdamsУчастникЕсли не секрет, откуда взяты эти примеры?
Внизу страницы “Правила исходящих”.
Если разобраться в регулярных выражениях, можно написать любое правило. Разобраться в них можно, если изучить принцип работы.
Ими пока и пользуюсь. Просто предложенный мною вариант более простой и понятен даже особо не разбираясь в принципах, т.е. интуитивно понятен (относительно) 🙂
Или вот, для звонков на Мегафон МСК кроме просто для общения
/^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})/. Если реализовать вариант с вложениями, то это бы очень сильно сократило длину шаблонов.
21.07.2015 в 17:45 #8993DominiqueУчастникА какие раньше были простые шаблоны у Астериска… Например:
_[2-79]XXXXXX – любой семизначный номер, начинающийся на любые цифры, кроме 0, 1 и 8; _8495[2-79]XXXXXX - то же самое с префиксом; _91[0567]XXXXXXX - номера МТС из 10 цифр; _0049X. - любые номера в Германии; _00ZX. - любые международные звонки с заранее неизвестной длиной номера
…
21.07.2015 в 19:29 #8994AdamsУчастникЯ просто постарался сильно не менять логику шаблонов и сконструировать “упрощённую” версию на базе того, что уже есть, но которую можно будет легко понять без долгого изучения синтаксиса.
P.S. Кстати, я в своём примере /7[3,87,920-929]%/,/11(d{6-10})$/,00%,???? допустил ошибку, правильно будет так /7[3,87,920-929]%/,/11(d{6-10})/,00%,????
24.07.2015 в 15:12 #9002DemonУчастникТему нужно разделить на две части и дам своё текущее видение по ним:
1. указание нескольких шаблонов (через запятую) в одной строке. Да, это нужно. Конечно согласен. Сейчас возможно указать несколько шаблонов только “простых” (т.е. с указанием %). Планирую реализовать указание списка любых шаблонов, в том числе с заменой.2. Изменение формата шаблонов, новые форматы шаблонов.
Сейчас есть два формата:
а) простой с символом подстановки “%”. Ну тут вряд ли кто против такого
б) регулярные выражения. Не стоит изобретать нового… незнакомого людям. Указание символов ^ в начале и $ в конце – это часть регулярного выражения. Их можно опускать… но тогда смысл выражения меняется. Если человек знает регулярное выражение, то он им воспользуется. Если не знает.. то лучше уж узнает “правильное” построение выражения, чем очередное кривое колесо.Добавить новый формат из астериска… начинающийся с “_” (в примерах @dominique), наверное, можно. Он хорошо описывает числовые номера… количество чисел и в том числе диапазоны номеров. Но он как и регулярные выражения позиционный шаблон, а не такой чтобы 920-929 или 925,926. Все известные мне шаблоны рассматривают цифры, а не числа.
24.07.2015 в 15:24 #9003DominiqueУчастник@Demon “Цифры, а не числа” – это как? Может, имелось в виду “символы, а не цифры”?
Дело в том, что нецифровые SIP ID вообще имеют довольно ограниченное применение, фактически они только для “внутрисетевого” общения, как и логины Skype. На них например нельзя позвонить с донабором из PSTN, и соответственно они же не могут быть переданы туда в качестве Caller ID. Т.е. на данный момент это скорее баловство, и не уверен, что нужно ради него так сильно усложнять синтаксис всех шаблонов.24.07.2015 в 15:37 #9004DemonУчастник41 – две цифры и одно число 🙂 Ну и да… два символа.
О позиционности шаблона я говорил что он оперирует цифрами (ну или символами), а не числами (как предлагалось выше).
А по поводу ограниченности применения – АТС должна работать не только с сотовыми или ТФОП.. звонки в скайп или другие сип сети точно так же допустимы и должны должным образом обрабатываться. Иначе как бы Вы настроили звонки на свою АТС? 🙂24.07.2015 в 17:26 #9007AdamsУчастникА если просто сделать альтернативный вариант шаблонов? Который, например, как говорили выше, будет начинаться с “_” и там уже сделать простой синтаксис, типа того, что я описал, который будет понятен и прост. А дальше уже люди сами решат, что выбрать стандартизированные шаблоны или упрощённые. Можно даже сделать простенькое голосование, чтобы посмотреть как много людей хотели бы иметь возможность работы с упрощённым синтаксисом, а кто за стандартные шаблоны. Если выяснится, что всем нравятся те шаблоны, что есть, тогда конечно не стоит ничего менять из-за 2-3 человек, но если таких людей много, то стоит хотя бы рассмотреть возможность внедрения альтернативных шаблонов.
25.07.2015 в 00:08 #9009DemonУчастникЗаморочился… и создал 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это для себя… чтобы не потерялось 🙂
27.07.2015 в 14:37 #9019DemonУчастникВроде бы реализовал возможность указания нескольких правил в одной строке через запятую. В том числе с заменой. В исходящих правилах значение замены переехало из отдельного поля в сам шаблон (через знак “=”).
Внимание! Выполняются ВСЕ правила через запятую последовательно!
Пример:
шаблон 1%=2%,2%=3%,3%=4%
номер 1111 в результате будет заменён на 4111.
надеюсь.. это не станет неприятным сюрпризом.
Сейчас буду искать ошибки… буду улучшать вывод при тестировании правил… буду подключать шаблон типа _XXX27.07.2015 в 15:59 #9021DemonУчастникРеализован поддержку шаблонов (паттернов) от asterisk. Вот только там нет замены… только сравнение.
Тестируйте, сообщайте о результатах.27.07.2015 в 20:16 #9025DominiqueУчастникНет замены – то есть вариант _8495ХХХХХХХ заменить на _7495ХХХХХХХ не получится сделать?
29.07.2015 в 12:00 #9029DemonУчастникА если шаблон будет _8495Х4ХХХХХ ?
А если _849[59]ХХХХХХХ ?
и много других вариантов…
Единственное что могу предложить… это некоторая вариация типа _8495(ХХХХХХХ)=$1
🙂30.07.2015 в 00:16 #9033DominiqueУчастникА если шаблон будет _8495Х4ХХХХХ ? А если _849[59]ХХХХХХХ ?
А в чём разница? Синтаксис-то один..
Единственное что могу предложить… это некоторая вариация типа _8495(ХХХХХХХ)=$1
Т.е. можно сделать _8(495ХХХХХХХ)=_7$1?07.08.2015 в 19:13 #9073DemonУчастникТеперь можно сделать, но иначе: _8(495ХХХХХХХ)=7$1
при замене не нужен символ “_”07.08.2015 в 22:16 #9074DominiqueУчастникКруто, попробую.
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.