dataweave 中的 isAlpha 或 isAlphanumeric 未按预期工作

isAlpha or isAlphanumeric in dataweave not working as expected

我在有效负载中有 2 个键,我想验证它们的值,这是场景

{
    "System" : "ABC",
    "Number" : 123.45
},
{
    "System" : "ABC123",
    "Number" : "123abc"
}

我想验证字符串“System”是否只包含字符而不包含任何数字。

我尝试了 isAlphanumeric(payload[0].system)contains(payload[0].system, /^[0-9]+$/,但仍然无法给出正确的结果。如何确保系统只有字符而不是字母数字?

数字也一样,我想验证数字字段是否有任何字符?如果我使用 isNumeric(payload[0].number) 它不会验证小数,如果数字有小数则 return false,如果我使用 isDecimal(payload[0].number) 并且如果数字是 1234 则不会验证。

如何验证这 2 个字段?

请记住,在您的示例中,您为同一字段混合了 StringNumber 类型; isDecimal需要一个Number,只用于判断Number是否为十进制数。当您调用它时,您已经需要知道它是否是 Number 类型。如果您希望能够混合和匹配类型:

输入:

[{
    "System" : "ABC",
    "Number" : 123.45
},
{
    "System" : "ABC123",
    "Number" : "123abc"
},
{
    "System": "AAAA-AAA",
    "Number": "1234"
},
{
    "System": "KLDJSKL2123",
    "Number": 123
},
{
    "System": "KLDJSLKFJ",
    "Number": "123.45"
}]

数据编织:

%dw 2.0
import isAlpha from dw::core::Strings

var isNumericOrDecimal = (str: Number | String) ->
    str match {
        case is Number -> true
        case str matches /^[\+\-]?\d*\.?\d+(?:[Ee][\+\-]?\d+)?/ -> true
        else -> false 
    }

output application/json
---
payload map { System: isAlpha($.System), Number: isNumericOrDecimal($.Number) }

输出:

[
  {
    "System": true,
    "Number": true
  },
  {
    "System": false,
    "Number": false
  },
  {
    "System": false,
    "Number": true
  },
  {
    "System": false,
    "Number": true
  },
  {
    "System": true,
    "Number": true
  }
]