流口水文件中的正则表达式
Regex in drool file
我在 drool 中使用正则表达式来验证密码。
rule "Reset Password"
when
$event : IIPEvent ( name == 'save')
$vm : Login(userProfile != null)
then
if($vm.getPassword().getValue() != null && $vm.getPassword().getValue().matches('^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$'))
outcome.addFieldError('password', 'Password minimum eight characters, at least one letter and one number', $vm, false);
end
当我在 Tomcat 服务器中部署它时,出现以下异常
行11:104字符'd'没有可行的选择
第 11:113 行在字符 '\' 处没有可行的替代方案
2020 年 10 月 23 日 8:48:21 下午 org.drools.compiler.kie.builder.impl.AbstractKieModule buildKnowledgePackages
严重:无法构建 KieBaseModel:defaultKieBase
无法确定使用的声明。
java.lang.NullPointerException : [规则名称='Reset Password']
java.lang.NullPointerException
如果哪位知道如何解决,请告诉我
您应该在左侧而不是右侧进行匹配。这就是 'matches' 运算符的用途。
rule "Reset Password"
when
exists(IIPEvent(name == "save"))
$vm : Login( userProfile != null,
password != null,
password matches "(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$")
then
outcome.addFieldError("password", "Password minimum eight characters, at least one letter and one number", $vm, false);
end
至于您收到错误的原因——您有 \d
而不是 \d
。您需要转义字符串中字符 类 的反斜杠。您可以从错误消息中看出问题所在:no viable alternative at character 'd'
然后是 no viable alternative at character '\'
.
我在 drool 中使用正则表达式来验证密码。
rule "Reset Password"
when
$event : IIPEvent ( name == 'save')
$vm : Login(userProfile != null)
then
if($vm.getPassword().getValue() != null && $vm.getPassword().getValue().matches('^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$'))
outcome.addFieldError('password', 'Password minimum eight characters, at least one letter and one number', $vm, false);
end
当我在 Tomcat 服务器中部署它时,出现以下异常
行11:104字符'd'没有可行的选择 第 11:113 行在字符 '\' 处没有可行的替代方案 2020 年 10 月 23 日 8:48:21 下午 org.drools.compiler.kie.builder.impl.AbstractKieModule buildKnowledgePackages 严重:无法构建 KieBaseModel:defaultKieBase 无法确定使用的声明。 java.lang.NullPointerException : [规则名称='Reset Password'] java.lang.NullPointerException
如果哪位知道如何解决,请告诉我
您应该在左侧而不是右侧进行匹配。这就是 'matches' 运算符的用途。
rule "Reset Password"
when
exists(IIPEvent(name == "save"))
$vm : Login( userProfile != null,
password != null,
password matches "(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$")
then
outcome.addFieldError("password", "Password minimum eight characters, at least one letter and one number", $vm, false);
end
至于您收到错误的原因——您有 \d
而不是 \d
。您需要转义字符串中字符 类 的反斜杠。您可以从错误消息中看出问题所在:no viable alternative at character 'd'
然后是 no viable alternative at character '\'
.