【发布时间】:2016-04-22 00:01:35
【问题描述】:
我收到消息中的日期作为字符串。以下正则表达式将确认它至少是我知道我可以处理的格式:
^[0-9]{4}\-(0?[1-9]|1[012])\-(0?[1-9]|[12][0-9]|3[01])$
但是当我将这个正则表达式提供给 Mule 表达式语言中的 validator.matchesRegex 方法时,如下所示:
<when expression="#[validator.matchesRegex(payload.DateOfBirth,'^[0-9]{4}\-(0?[1-9]|1[012])\-(0?[1-9]|[12][0-9]|3[01])$') == false]">
<set-variable variableName="validation_message" value="{"error": "Invalid DateOfBirth"}" doc:name="invalid DateOfBirth"/>
</when>
我收到以下错误:
org.mule.api.MessagingException: [Error: illegal escape sequence: -]
[Near : {... eOfBirth,'^[0-9]{4}\-(0?[1-9]|1[012])\-(0?[1-9]|[1 ....}]
^
[Line: 1, Column: 55] (org.mule.api.expression.InvalidExpressionException). Message payload is of type: HashMap
更新 我尝试了两个新的改动:
-
像这样把我的大括号加倍:
^[0-9]{{4}}-(0?[1-9]|1[012])-(0?[1-9]|[12][0-9]|3[ 01])$
但我得到了同样的错误,但有几个字符:
[Error: illegal escape sequence: -]
[Near : {... fBirth,'^[0-9]{{4}}\-(0?[1-9]|1[012])\-(0?[1-9]|[1 ....}]
^
[Line: 1, Column: 57] (org.mule.api.expression.InvalidExpressionException). Message payload is of type: HashMap
-
取消数字之间的破折号
'^[0-9]{{4}}-(0?[1-9]|1[012])-(0?[1-9]|[12][0-9]|3 [01])$
但我收到以下错误:
org.mule.api.MessagingException: Execution of the expression "validator.matchesRegex(payload.DateOfBirth,'^[0-9]{{4}}-(0?[1-9]|1[012])-(0?[1-9]|[12][0-9]|3[01])$') == false" failed. (org.mule.api.expression.ExpressionRuntimeException). Message payload is of type: HashMap
-
我已将模式更改为不使用转义反斜杠来仅接受破折号:
^[0-9]{4}.(0?[1-9]|1[012]).(0?[1-9]|[12][0-9]|3[01] )$ 我已将 '-' 替换为 '.'这不是我真正想要的,但它至少验证了数字部分。我已经确认这有效。它只允许无效值,例如“2016!02_23”,而实际上应该只允许“2016-02-23”
TL;DR:当您尝试转义短划线字符时,MEL 中的正则表达式存在错误?
【问题讨论】:
-
我认为你不应该逃避连字符。
-
另外,问题可能出在
{}。尝试在你的模式中将它们加倍。 -
谢谢,我两个都试试!
-
两个都试过了,又出错了。还有其他想法吗?
-
显示文档中的一些示例。 payload 可能是一个哈希映射。试过
payload['DateOfBirth']?