我在消息中收到一个字符串日期。以下正则表达式将确认它至少是我知道我能处理的格式:
^[0-9]{4}\-(0?[1-9]|1[012])\-(0?[1-9]|[12][0-9]|3[01])$
但是当我将此正则表达式提供给Mule Expression语言中的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
取消数字之间的破折号
&#39; ^ [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] )$ 我已经取代了&#39; - &#39;用&#39;。&#39;这不是我想要的,但它至少验证了数字部分。我已经证实了这项工作。它只允许无效的值,例如&#39; 2016!02_23&#39;当它真的应该只允许&#39; 2016-02-23&#39;
TL; DR:当您尝试转义短划线字符时,MEL中的正则表达式存在错误?
答案 0 :(得分:0)