В действиях по модификации параметров вызова одним из основных элементов для корректировки является изменение цифр номера абонента А или Б.
Существуют разные подходы к способу описания синтаксиса такой модификации: модификация на шаблонах, регулярные выражения и т.п.
Регулярные выражения являются самым гибким способом, позволяющим делать все возможные преобразования, но у него есть существенные недостатки:
- сложность синтаксиса - регулярные выражения - это универсальный механизм, используемый в разных сферах IT. Обладает своим сложным языком описания, что повышает входной порог знаний человека, который их использует;
- вычислительная сложность - вычисление результата модификации на базе регулярных выражений (в том числе в перекомпилированном варианте) требует больших вычислительных ресурсов по сравнению с модификацией на шаблонах.
Чтобы избавится от недостатков регулярных выражений, в системе ECSS-10 используется модификация номера на шаблонах.
При модификации номера используется следующая нотация:
- каждая цифра исходного номера (до модификации) обозначается либо числом описывающим ее позицию, либо буквой английского алфавита на соответствующей позиции (исходный семизначный номер без изменения можно записать в виде: "1,2,3,4,5,6,7" или "abcdefg");
- как и в условиях срабатывания правил, поддерживается спец символ "%", который означает ту часть номера, которая соответствует символу % в секции <conditions> (можно считать, что на этапе условия правила для соответствующего номера формируется переменная с именем "%", которая заполняется цифрами номера, а на этапе модификации она используется);
- для того, чтобы была возможность модифицировать номер (абонента А или абонента Б) он обязательно должен присутствовать в элементе <conditions> правила (это гарантирует соблюдение формата номера);
- для того, чтобы были возможны модификации с определенными цифрами в номере, в элементе <conditions> в условии для соответствующего номера цифры на требуемых позициях должны присутствовать либо сами цифры номера (шаблон по цифрам), либо цифры должны быть закрыты спецсимволами "?";
- для правил, обрабатывающих номер произвольной длины (в элементе <conditions> для цифр номера стоит условие со спец символом "%"), возможно только префиксирование (дописывание дополнительного префикса), либо постфиксирование (дописывание постфикса в конце номера);
- если необходимо вставить дополнительные цифры, которые не входили в исходный номер, то они просто записываются в поле "digits" в нужной позиции, поддерживается указание собственно цифр номера от 0 до 9 и букв A, B, C, D (либо a,b,c,d);
- если требуется записать элементы исходного номера в виде кодов (номеров позиции, либо буквенных кодов), либо в виде спец символа "%", то они записываются в фигурных скобках (например {abc}, либо {3,5,4}, либо {5,%}.
Примеры:
Удаление префикса 345 от десятизначного номера:
<conditions> <cgpn digits="345???????"/> </conditions> <actions> <cgpn digits="{4,5,6,7,8,9,10}"/> </actions>
Удаление префикса 345 от номера произвольной длины с префиксом 345:
<conditions> <cgpn digits="345%"/> </conditions> <actions> <cgpn digits="{%}"/> </actions>
Переставление цифр 2 и 3 в трехзначном номере (сами цифры любые):
<conditions> <cgpn digits="???"/> </conditions> <actions> <cgpn digits="{1,3,2}"/> </actions>
Префиксирование произвольного трехзначного номера с префиксом 008:
<conditions> <cgpn digits="???"/> </conditions> <actions> <cgpn digits="008{1,2,3}"/> </actions>
Правило, которое может использоваться для выхода на междугородную станцию. В частности видно, что правило сработает для вызовов, в которых у абонента А семизначный местный номер, номер абонента Б начинается на 8. Задача модификации преобразовать местный номер к междугородному, который понимает междугородка, для этого дописывается префикс и меняется «ni» и «nai». Номер Б не изменяется, его разбором занимается междугородка.
<conditions> <cgpn digits="???????" ni="local"/> <cdpn digits="8%"/> </conditions> <actions> <cgpn digits="8383{1,2,3,4,5,6,7}" ni="intercity" nai="nationalNumber"/> </actions>