IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

regexp test "au maximum x occurences " [RegExp]


Sujet :

JavaScript

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �clair�
    Homme Profil pro
    �tudiant
    Inscrit en
    Juillet 2012
    Messages
    217
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - Produits et services t�l�com et Internet

    Informations forums :
    Inscription : Juillet 2012
    Messages : 217
    Par d�faut regexp test "au maximum x occurences "
    Bonjour les amis,

    j'ai fais un regexp pour tester la saisie d'un champ qui doit �tre de cette forme:
    �tre compos� de 25 caract�res au maximum dont :
    les caract�res alphanum�riques
    -au plus une fois la parenth�se ouvrante et une fois la parenth�se fermante,
    -au plus 2 fois le underscore (_),
    -au plus 3 fois le tiret du 6 (-)
    -le caractere espace au au plus 4fois
    edit : le caractere slach ( /) au plus 2fois
    voici le code
    Code javaScript : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    function VerifierChamp(value) {
    var exp=new RegExp("^[a-zA-Z0-9/{,2}{,2}({,1}){,1}_{,2} {,4}-{,3}]{,25}");
     if ( exp.test(value) ) {alert("Le value["+value+"] est valide :)"); }
          else {alert(" E R R E U R !\n\nLe value["+value+"] n'est pas valide !!!!"); }
     }

    La syntaxe marche jusqu'au niveau de la parenth�se qui suit le tiret du 6.
    Apres pour le reste la v�rification marche juste pour les caract�res alphanum�riques mais ne respecte pas les valeurs par exemple quand j'�cris papa((( il me dis que c'est bon
    je voudrais savoir si la fa�on dont je l'ai fais est bon d'abord et puis ce qui ne va pas.

    je d�bute avec les regexp donc pardonnez mes b�tises si j'en ai fais

    Merci de votre aide

  2. #2
    R�dacteur/Mod�rateur

    Avatar de SpaceFrog
    Homme Profil pro
    D�veloppeur Web Php Mysql Html Javascript CSS Apache - Int�grateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activit� : D�veloppeur Web Php Mysql Html Javascript CSS Apache - Int�grateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par d�faut
    ne fonctionne pas comme au plus une fois dans une classe []
    et ce n'est d'ailleurs pas possible dans une regexp de v�rifier si la chaine comporte au maximum 2 occurrences sauf � tester la longueur d'un match ..

    Il va falloir passer par des indexOf en boucle ...
    Ma page Developpez - Mon Blog Developpez
    Pr�sident du CCMPTP (Comit� Contre le Mot "Probl�me" dans les Titres de Posts)
    Deux r�gles du succ�s: 1) Ne communiquez jamais � quelqu'un tout votre savoir...
    Votre post est r�solu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de D�veloppez !

  3. #3
    Membre exp�riment�
    Profil pro
    Inscrit en
    D�cembre 2007
    Messages
    128
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2007
    Messages : 128
    Par d�faut
    Si c'est possible mais c'est un poil complexe et surtout un peu verbeux.
    Il faut utiliser des lookahead.

    L'expression fait un peu peur au premier abord mais elle n'est pas si compliqu�e que �a, c'est le m�me principe r�p�t� une douzaine de fois :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    var rx = /(?=(?:^[^()]*\([^()]*\)[^()]*$|^[^()]*$))(?=^[^_]*_?[^_]*_?[^_]*$)(?=^[^-]*-?[^-]*-?[^-]*-?[^-]*$)(?=^[^\s]*\s?[^\s]*\s?[^\s]*\s?[^\s]*\s?[^\s]*$)(?=^[^/]*\/?[^/]*\/?[^/]*$)^[a-zA-Z\d\s\-_/()]{1,25}$/;
     
    console.log(rx.test('1-   // --__(2)'));

  4. #4
    R�dacteur/Mod�rateur

    Avatar de SpaceFrog
    Homme Profil pro
    D�veloppeur Web Php Mysql Html Javascript CSS Apache - Int�grateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activit� : D�veloppeur Web Php Mysql Html Javascript CSS Apache - Int�grateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par d�faut
    le souci des lookaround c'est qu'ils n'acceptent pas des longueurs non d�finies
    or dans son cas c'est plus de ... qui n'est pas g�rable en regexp
    Ma page Developpez - Mon Blog Developpez
    Pr�sident du CCMPTP (Comit� Contre le Mot "Probl�me" dans les Titres de Posts)
    Deux r�gles du succ�s: 1) Ne communiquez jamais � quelqu'un tout votre savoir...
    Votre post est r�solu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de D�veloppez !

  5. #5
    Membre exp�riment�
    Profil pro
    Inscrit en
    D�cembre 2007
    Messages
    128
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2007
    Messages : 128
    Par d�faut
    Non Xeuch demande "au plus" ce qui veut dire "au maximum".

    Et puis m�me si cela peut sembler contre-intuitif il est parfaitement possible de g�r�r des minimums ou des maximums avec des lookaheads.

    En proc�dant de cette mani�re par exemple :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    var rxMaxTwoUnderscore = /(?=^[^_]*_?[^_]*_?[^_]*$).{3,6}/;
    var rxMinTwoUnderscore = /(?=_.*_).{3,6}/;
     
    console.log(rxMaxTwoUnderscore.test('az_er_t_y')); // false trop d'underscore
    console.log(rxMaxTwoUnderscore.test('az_ert_y'));  // true
    console.log(rxMaxTwoUnderscore.test('azert_y'));   // true
    console.log(rxMaxTwoUnderscore.test('azerty'));    // true
     
    console.log(rxMinTwoUnderscore.test('az_er_t_y')); // true
    console.log(rxMinTwoUnderscore.test('az_ert_y'));  // true
    console.log(rxMinTwoUnderscore.test('azert_y'));   // false pas assez d'underscores
    console.log(rxMinTwoUnderscore.test('azerty'));    // false pas assez d'underscores

  6. #6
    R�dacteur/Mod�rateur

    Avatar de SpaceFrog
    Homme Profil pro
    D�veloppeur Web Php Mysql Html Javascript CSS Apache - Int�grateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activit� : D�veloppeur Web Php Mysql Html Javascript CSS Apache - Int�grateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par d�faut
    Je suis tr�s surpris car dans ton look ahead tu as un * .... or j'ai toujours lu que les look around n'acceptaient pas de longueur ind�termin�e ...
    Ma page Developpez - Mon Blog Developpez
    Pr�sident du CCMPTP (Comit� Contre le Mot "Probl�me" dans les Titres de Posts)
    Deux r�gles du succ�s: 1) Ne communiquez jamais � quelqu'un tout votre savoir...
    Votre post est r�solu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de D�veloppez !

+ R�pondre � la discussion
Cette discussion est r�solue.

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo