【发布时间】:2018-11-03 07:32:10
【问题描述】:
我正在研究一种逻辑,其中用户定义了多个要验证的条件,然后他们还定义了该条件应该以何种方式评估,这样理解,用户定义了 4 个不同的条件,当用户定义了评估标准时,它定义了比如((1 AND 2 AND 3) OR 4),所以我想在正则表达式的帮助下验证评估标准,我构建了以下函数,
function validateCustomLogic(ele){
var msg = '';
var isError = false;
var eleVal = $(ele).val();
if(typeof eleVal != 'unknown' && typeof eleVal != 'undefined' && eleVal != null && eleVal != ''){
var regEx = /^([(]*[1-9]+[ ][AND|OR]\w*[ ][1-9]*[)]*)*$/gi;
var matchEle = eleVal.match(regEx);
if(matchEle == null){
isError = true;
}
}
else{
isError = true;
}
return isError;
}
这个函数在用户定义评估标准的地方调用我的输入更改,
<input onchange="validateCustomLogic(this)" type="text" />
我的正则表达式/^([(]*[1-9]+[ ][AND|OR]\w*[ ][1-9]*[)]*)*$/gi 适用于一些模式识别,但不是全部,下面是测试结果,
Input Result Expected Result
1 AND 2 AND 3 AND 4 Error: false false
1 AND 2 AND (3 AND 4) Error: false false
1 AND 2 AND 3 (AND 4) Error: true true
(1 AND 2 AND 3 AND 4 Error: false true*
)1 AND 2 AND 3 AND 4 Error: true true
(1 AND 2 AND 3) AND 4 Error: true false*
(1 AND 2)(AND 3 AND 4) Error: true true
((1 AND 2 AND 3 AND 4) Error: false true*
如果您看到测试结果,一些带有* 的条目对此正则表达式不满意,不确定我在这里遗漏了什么。谁能帮我验证一下。
【问题讨论】:
-
您可能想要跟踪左括号和右括号的数量。
-
我知道正则表达式可能不适用于开括号和右括号的数量,但它仍然应该满足
(1 AND 2 AND 3) AND 4条件,但我也愿意提出其他建议,这是一个逻辑一切 -
查看answer
-
^(\()?(?:[1-9]+[ ][AND|OR]\w*[ ][1-9]*)*(?(1)\))$使用条件正则表达式验证第一级括号。 -
我试过了,但它似乎是正则表达式中的一些问题,你有没有在regexr.com验证它
标签: javascript jquery regex validation