Expression réguliere / JS

salut a tous,

jai un probleme avec une expression réguliere en javascript

jessaie d'interdire que les 2 premiers caracteres soient différent de '00' et que la chaine de caractere ne soit que des chiffres avec 1 min de 9 chiffres

voila ce ke jai essayé (et échoué...) entre autres de faire avec ceci

var expr=/^[^(00)]\d{9,}$/


si vous avez une idée

11 réponses

  • Votes
  • Date
  • Date décroissante
  1. euh attends... tu dis "interdire que ce soit différent" mais ton expression laisse plutôt penser que tu veux que ce soit différent

    si tu veux que ce soit différent c'est ça:

    /^[^(00)]\d\{7,\}$/
    


    si tu veux interdire que ce soit différent c'est ça:

    /^00\d\{7,\}$/
    


    j'ai remplacé 9 par 7 puisque tu veux une chaîne de 9 chiffres et il y en a déjà 2

    le début de chaîne différent de 00 on est bien d'acord que ça signifie que 00 n'est pas bon mais 10 est bon et 01 est bon

    sinon c'est ça:

    /^[^0][^0]\d\{7,\}$/
    


    et ça dépend aussi si les deux premiers caractères doivent être aussi des chiffres, auquel cas le plus simple, dans le cas précédent, c'est

    /^[1-9][1-9]\d\{7,\}$/
    


    kinder.surprise,
    caractère banane
    1. euh testé dans vi. Faudra peut-être que tu vires les antichlasses

      kinder.surprise,
      caractère banane
      1. Salut kinder,
        merci pour ton aide

        cest vrai que je n'ai pas été précis voir meme tres confus ;-)

        en effet, il doit accepter
        1) x0aaaaaaa 
        2) 0xaaaaaaa 
        3) xxaaaaaaa


        où
        x = [1-9]
        0 = 0
        a = [0-9]

        il doit donc refuser uniquement quand ca commence par le couple de chiffre '00'

        donc je n'ai retenu que ta premiere version qui ressemble a la mienne et qui a comme défaut (et cest la que je ne comprend pas) quil n'acceptre pas le

        2) 0xaaaaaaa


        en attendant jai trouver une autre solution, elle a l'avantage de marcher mais elle n'est pas terrible

        /^(([1-9]0)|(0[1-9])|([1-9][1-9]))\d{7,}$/


        en effet, la c'était un cas 'simple' mais imaginons qu'a lavenir je veuille interdire le quatuor '0000' je devrais traité tout les cas possible au lieu dinterdire simplement le cas '0000' ???
        1. derme :-|

          bonche j'éplucherai la doc de perl tout à l'heure, ça m'intrige maintenant

          kinder.surprise,
          caractère banane
          1. dorbel 8-|

            ben j'ai beau chercher, je trouve pô 8-|

            punaise ça doit pas être compliqué pourtant!

            kinder.surprise,
            caractère banane
            1. Webmaster
              En Perl je ne sais pas exactement mais moi j'aurais mis ça :

              /^[^0][^0][0-9]{7}[0-9]*?$/


                                                 Jeff  --WM@CCM--
              1. le blême c'est que ça interdit aussi 019876543 ou 109876543

                il y a seulement le 00 qui doit être interdit

                j'ai trouvé une syntaxe du genre /^00\?trucbidule/ qui semble flanquer ce qui précède dans une sorte de variable ou un truc comme ça mais j'arrive pas à aller au delà... pourtant j'ai le sentiment que ça doit permettre une sorte d'inversion du critère... enfin bon je suis pas très clair là...

                kinder.surprise,
                caractère banane
              2. Webmaster
                ou mieux :

                /^(([0-9][1-9][0-9]{5})||([1-9][0-9]{6}))[0-9]*?$/


                                                   Jeff  --WM@CCM--
              3. en fait l'exclusion on est d'accord que c'est toujours sous la forme [^x] où x est un caractère mais il doit bien y avoir un moyen de passer un mot complet à la place du x mais j'arrive pas à trouver comment

                kinder.surprise,
                caractère banane
              4. Webmaster
                @JeffRemarque j'avais pas vu celle proposée à la base qui était encore mieux...

                                                   
                Jeff  --WM@CCM--
              5. Webmaster
                @Utilisateur anonymeL'essentiel ce n'est pas que l'expression régulière soit la plus courte possible mais :
                - qu'elle fonctionne
                - qu'elle bouffe le moins de ressources possibles

                Après on peut en faire un challenge personnel mais c'est autre chose !

                Pour tout dire vu que c'est que des chiffres moi je ne prendrais pas une expression régulière pour ça ...

                Je ferais un truc du genre :

                if (int(chaine[0])*int(chaine[1]) != 0)


                Et je vérifierais que tous les caractères sont des chiffres et qu'il y en a 9 ;-)

                                                   Jeff  --WM@CCM--
            2. CA Y EST!

              (?(?=^00)^$|^\d{9,}$)


              testé dans xnews, et dans The Bat!, les deux softs que j'ai qui collent au plus près avec la syntaxe originale

              je vais rebouter sur le pingouin et voir mais ça semble bon

              kinder.surprise,
              caractère banane
              1. okie, testé dans pcretest, c'est bon

                PCRE version 3.9 02-Jan-2002
                
                  re> /(?(?=^00)^$|^\d{9,}$)/
                data> 0024abc45
                No match
                data> 0012456
                No match
                data> 0012548793654
                No match
                data> 001234567
                No match
                data> 011234567
                 0: 011234567
                data> 101234567
                 0: 101234567
                data> 111234567
                 0: 111234567
                data> 11112365478965
                 0: 11112365478965
                data> 0112345d6
                No match
                


                kinder.surprise,
                caractère banane
                1. Bravo pour ta ténacité, kinder !
                  ;-)

                  mais je demandais en JS et non en perl (qui est effectivement plus complet niveau expression réguliere)

                  donc le probleme reste le meme pour moi :(

                  en tout cas merci pour ton aide
                  1. euh c'est un peu comme si tu me demandais une instruction SQL en php là :-/

                    ou alors définis les specif des er en js

                    kinder.surprise,
                    caractère banane