【问题标题】:Regex to validate the conditions evaluation logic which is defined by User正则表达式验证用户定义的条件评估逻辑
【发布时间】: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


【解决方案1】:

https://regex101.com/r/anq7Mc/2

/^\((\d+\)? (AND|OR) )+\d+(\)|\) .*?)$|^(\(?\d+\)? (AND|OR) )+\d+(\)|\) .*?)$|^(\d+ (AND|OR) )+\d+$/

这就是你所需要的匹配

【讨论】:

    猜你喜欢
    • 2012-01-18
    • 1970-01-01
    • 1970-01-01
    • 2014-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-23
    • 1970-01-01
    相关资源
    最近更新 更多