Задать вопрос
guvijur
@guvijur
Практик, кинестетик, ретроград и консерватор

Как написать условие перехода GotoIf() в Asterisk с использованием регулярных выражений?

Добрый день!
В плане набора asterisk необходимо написать условие, которое перенаправляет на одну метку, если все условия выполнены, или на другую, если хотя бы одно ложно.

same => n,GotoIf($[$["${DSTREC}" = "0"] & $["${SRCREC}" = "0"] & $["${CIDLENGTH}" = "4"] & $[$REGEX("^SIP\/[1-9][0-9][0-9][0-9]" ${CHANNEL:0:8}) = "1"]]?recordingdisabled:recordingenabled)

С DSTREC, SRCREC и CIDLENGTH вопросов нет, эти значения беруться или из базы, или формируются в процессе обработки и статичны, так скажем. А вот в той части значения канала (${CHANNEL:0:8}), ограниченное мной 8-мью символами, могут меняться последние 4.
Первые 4 символа должны быть равны "SIP/", а последние 4 - это только цифры, при чём первая из которых не выходит из диапазона 0 - 9, а 3 последующие - от 0 до 9.
Я попытался написать сам, но чувствую, что получилась какая-то дичь.

Помогите.
  • Вопрос задан
  • 334 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
@Drill
при чём первая из которых не выходит из диапазона 0 - 9, а 3 последующие - от 0 до 9.

$[${REGEX("^SIP\/[0-9]{4}" ${CHANNEL:0:8})}]

если все-таки первая из которых не выходит из диапазона 1 - 9, то
$[${REGEX("^SIP\/[1-9][0-9]{3}" ${CHANNEL:0:8})}]

Так не надо делать: ${REGEX(...) = "1"}, достаточно просто ${REGEX(...)}
core show function REGEX:
Return '1' on regular expression match or '0' otherwise
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы