如何验证字符串格式数组是否仅含数值并完成转换?
字符串格式数组的数值有效性验证方案
原代码功能
以下代码可验证原生数组是否仅包含非空数值元素,同时判断数组元素数量:
%dw 2.0 output json fun isValidElements(arr: Array) = arr map ((item) -> item is Number and item != null) reduce ((acc, item) -> acc and item) fun isValidArray(arr: Array) = (sizeOf(arr) > 0) and (isEmpty(arr) or isValidElements(arr)) fun flagInvalidArray(arr: Array) = isValidArray(arr) var MyArray = [123,456,789] --- { "arrayValid": flagInvalidArray(MyArray), "arraySize": if (sizeOf(MyArray) > 1) "Multiple" else "Single" }
需求说明
需要针对字符串格式的数组输入(如 "[123,456,789]")完成验证:
- 有效数组:仅包含非空数值且非空,例如
"[123,456,789]"、"[12345]" - 无效场景:包含非数值(如
"[ABC,123,456]")、null(如"[123,null,456]")、垃圾值(如"[,,,,,%$$$]")或空数组,此类情况需标记为无效,垃圾值需转为空数组
直接使用read函数转换无效字符串会抛出异常,因此需要做异常捕获处理。
解决方案代码
%dw 2.0 output json // 验证数组元素是否全为非空数值 fun isValidElements(arr: Array) = arr map ((item) -> item is Number and item != null) reduce ((acc, item) -> acc and item) // 验证数组非空且元素有效 fun isValidArray(arr: Array) = sizeOf(arr) > 0 and isValidElements(arr) // 尝试将字符串解析为数组,失败则返回空数组 fun parseStringToArray(str: String): Array = try(() -> read(str, "application/json")) otherwise [] // 处理字符串输入的完整验证逻辑 fun validateStringArray(str: String) = do { var parsedArray = parseStringToArray(str) var isArrayValid = isValidArray(parsedArray) --- { "arrayValid": isArrayValid, "arraySize": if (isArrayValid) (if (sizeOf(parsedArray) > 1) "Multiple" else "Single") else "Invalid", "parsedArray": parsedArray } } // 测试示例 var testCases = [ "[123,456,789]", "[12345]", "[ABC,123,456]", "[123,null,456]", "[,,,,,%$$$]", "[]" ] --- testCases map ((testCase) -> { input: testCase, result: validateStringArray(testCase) })
关键逻辑说明
- 异常捕获解析:
parseStringToArray函数用try...otherwise捕获read解析失败的情况,将无效字符串转为空数组,避免抛出错误 - 复用验证逻辑:保留原有的
isValidElements和isValidArray函数,确保元素验证逻辑一致 - 结果返回:返回验证状态、元素数量(仅当有效时)、解析后的数组,清晰展示处理结果
内容的提问来源于stack exchange,提问作者Triumph Spitfire
相关产品推荐
相关产品推荐

