用于过滤变量值的 MEL 表达式

MEL Expression for filtering the value of a Variable

我已经在变量中存储了一个值。它是一个 ID,看起来像这个 1-2823596-1 或 CAT-R131-L6267。现在我需要编写一个表达式,根据 ID 的第一个值(即它是数字还是字母表)过滤此 ID。据此,我将选择我的路由器。谁能告诉我如何写这个表达式,因为我对 Mulesoft 比较陌生

尝试使用给定的示例,但无法创建

enter code here {  a: payload.a match {
case is Object -> 'OBJECT'
case is String -> 'STRING'
case is Number -> 'NUMBER'
case is Boolean -> 'BOOLEAN'
case is Array -> 'ARRAY'
case is Null -> 'NULL'
else -> 'ANOTHER TYPE'  },  b: payload.b match {
case y is Object -> { 'Type': { 'OBJECT' : y} }
case y is String -> { 'Type': { 'STRING' : y} }
case y is Number -> { 'Type': { 'NUMBER' : y} }
case y is Boolean -> { 'Type': { 'BOOLEAN' : y} }
case y is Array -> { 'Type': { 'ARRAY' : y} }
case y is Null -> { 'Type': { 'NULL' : y} }
else -> { 'Type': { 'ANOTHER TYPE' : payload.b} }  }}

也试过使用子字符串

enter code here #[vars.reqTcpn == vars.reqTcpn[0..0] match[0-9]]

需要检查字符串的第一个值是字符还是数字,以便我可以选择路由器

您使用的是 Mule 4,因此 MEL 已被替换为 Dataweave 作为表达语言。

在最近发布的 Mule 4.2 和 Dataweave 2.2.0 中,有一个新的 isNumeric 函数可以执行此操作:

import isNumeric from dw::core::Strings output application/java --- isNumeric(vars.reqTcpn[0 to 0])

https://docs.mulesoft.com/mule-runtime/4.2/dw-strings-functions-isnumeric

MulE 4 versions < 4.2 你可以使用 substring[0 to 0]match 的组合用于正则表达式来检查它的数字。然后 sizeOf 检查至少有 1 个匹配项:

#[sizeOf(match(vars.reqTcpn[0 to 0], '[0-9]')) > 0]