首页 > 解决方案 > 用于过滤变量值的 MEL 表达式

问题描述

我在变量中存储了一个值。它是一个 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]]

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

标签: mulesoft

解决方案


您使用的是 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 版本 < 4.2 您可以使用子字符串[0 to 0]match正则表达式的组合来检查它的数字。然后sizeOf检查是否至少有 1 个匹配项:

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

推荐阅读