Bonjour,
Après une longue Quelqu'un a suggéré l'utilisation de ce code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
 
var verifierFormeZone = function(){ 
    //constante
    var groupeReg = /^(\s*\d+\s*(and|or)\s*)+\d+\s*$/i,
    partialStartReg = /^\s*(\s*\d+\s*(and|or)\s*)+$/i,
    partialMiddleReg = /^((and|or)\s*\d+)*\s*(and|or)\s*$/i,
    partialEndReg = /^(\s*(and|or)\s*\d+\s*)+$/i;
    return function(groupe){
        if(groupe.indexOf('(') > -1){
           var subGroupe = [],
                partialGroupe = [],
                i = 0, 
                l = groupe.length,
                incr = 0,
                start = 0,
                lastPartial;
 
            for(; i < l; i++){
                if(groupe[i] == '('){
                   if(!incr){
                       partialGroupe.push(groupe.slice(start, i));
                       start = i;
                   }
                   incr++;
                }
                if(groupe[i] == ')'){
                    incr--;
                    if(!incr){
                        subGroupe.push(groupe.slice(start + 1, i));
                        start = i + 1;
                    }
                } 
            }
            lastPartial = groupe.slice(start);
            var i = 0, 
                l = subGroupe.length, 
                reg;
 
            for(; i < l; i++){ 
                if(!verifierFormeZone(subGroupe[i]))
                    return false;
                if(partialGroupe[i]){
                    alert(partialGroupe[i]);
                    var reg = i ? partialMiddleReg : partialStartReg;
                    alert(reg);
                    alert(reg.test(partialGroupe[i]));
                    if(!reg.test(partialGroupe[i]))
                        return false; 
                }
            }
            return lastPartial ? partialEndReg.test(lastPartial) || false : true;
        }
        return groupeReg.test(groupe) || false;
    }
}();
 
alert(verifierFormeZone(maChaine));
pour verifier si l'utilisateur saisi la bonne forme ds la zone...
parmis les forme acceptable on a : (1 and 2) or 3 , (1 and (2 or 3) and 4), 1 and 2 or 3........
tt marche bien mais avec un petit problem il accepte aussi la forme :
(1 and 2)(3 or 4) mais cette forme fausse

je pense le problem ds le regex :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
partialMiddleReg = /^((and|or)\s*\d+)*\s*(and|or)\s*$/i,
merci de m'aider