Regex для проверки логики оценки условий, определенной пользователем - PullRequest
0 голосов
/ 24 мая 2018

Я работаю над логикой, в которой пользователь определил несколько условий для проверки, а затем они также определили, каким образом это условие должно оцениваться, понять его следующим образом. Пользователь определил 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 Ответ

0 голосов
/ 30 апреля 2019

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

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

Это все, что вам нужно

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...