Uri 星号拨号计划:清理分机

Uri 星号拨号计划:清理分机,uri,sip,asterisk,Uri,Sip,Asterisk,我的sip客户端正在发送一些在空格处使用奇怪字符拨打的号码 例如011▒237▒1140141 如何删除▒字符?一个快速(但并非完美)的解决方法可能是: exten => s,1,Set(strangeID=${CALLERID(number)}) exten => s,2,Set(strangeID_splited=${CUT(strangeID,▒,1-3&5-7&9-16)}) exten => s,3,Dial(SIP/stangeID_splited)

我的sip客户端正在发送一些在空格处使用奇怪字符拨打的号码

例如
011▒237▒1140141

如何删除
字符?

一个快速(但并非完美)的解决方法可能是:

exten => s,1,Set(strangeID=${CALLERID(number)})
exten => s,2,Set(strangeID_splited=${CUT(strangeID,▒,1-3&5-7&9-16)})
exten => s,3,Dial(SIP/stangeID_splited)
我假设这个奇怪的字符不是
,因此您可以在拨号计划中声明它,并且号码的长度和位置始终相同,因此您可以告诉星号哪些位置是不需要的字符

否则,您可以制作一个AGI脚本来消除这些角色,我知道这不是最理想的方法,但它肯定会奏效


希望对您有所帮助。

您可以使用过滤功能。是的,您也需要替换cna regexp,但这要复杂得多

localhost*CLI>核心显示函数筛选器

  -= Info about function 'FILTER' =- 

[Synopsis]
Filter the string to include only the allowed characters 

[Description]
Permits all characters listed in <allowed-chars>,  filtering all others outs.
In addition to literally listing the characters,  you may also use ranges
of characters (delimited by a '-'
Hexadecimal characters started with a '\x'(i.e. \x20)
Octal characters started with a '\0' (i.e. \040)
Also '\t','\n' and '\r' are recognized.
NOTE: If you want the '-' character it needs to be prefixed with a  '\'

[Syntax]
FILTER(allowed-chars,string)
-=关于函数“FILTER”的信息=-
[简介]
筛选字符串以仅包含允许的字符
[说明]
允许中列出的所有字符,过滤所有其他字符。
除了逐字列出字符外,还可以使用范围
字符数(以“-”分隔)
十六进制字符以“\x”(即\x20)开头
以'\0'开头的八进制字符(即.\040)
还可以识别'\t'、'\n'和'\r'。
注意:如果需要“-”字符,则需要在其前面加“\”前缀
[语法]
筛选器(允许的字符、字符串)

我用拨号计划中的
FILTER
命令解决了这个问题:

exten => _X.,1,Set(CALLERID(dnid)=${FILTER(0-9,${CALLERID(dnid)})})

数字的长度并不总是相同的。难道没有一种正则表达式方法可以做到这一点吗?