Drools drool文件中的正则表达式
我正在drool中使用regex来验证密码Drools drool文件中的正则表达式,drools,Drools,我正在drool中使用regex来验证密码 rule "Reset Password" when $event : IIPEvent ( name == 'save') $vm : Login(userProfile != null) then if($vm.getPassword().getValue() != null && $vm.getPassword().getValue().matches('^(?=.*[
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
如果有人知道如何解决这个问题,请告诉我你应该在左手边进行匹配,而不是在右手边。这就是“匹配”操作符的作用
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
。您需要为字符串中的字符类转义反斜杠。您可以从错误消息中看出这是问题所在:字符“d”处没有可行的替代方案
,然后字符“\”处没有可行的替代方案