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 :

echec et match [RegExp]


Sujet :

JavaScript

  1. #1
    Membre régulier
    Inscrit en
    Octobre 2007
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 209
    Points : 120
    Points
    120
    Par défaut echec et match
    Bonjour,
    Un seul commentaire
    En xHTML la première ligne de la page est ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    Car nous voulons suivre les standards - plus pour longtemps sans doute...
    Pour tester quelques champs avant de l'envoyer à PHP nous utilisons une vérification via expression régulière
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     this.ReReg['Nom'] = /^[ \-\w\x80-\xFF]+$/;
    this.ReReg['Prenom'] = /^[ \-\w\x80-\xFF]+$/;
    Figurez vous que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var valeur = 'Jean';
    return valeur.match(this.ReReg['Prenom']);
    Renvoie false
    Tout comme 'DR' mais pas 'BARDOL' (true) allez donc savoir pourquoi ?
    Merci de vos aides !

  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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    EN dehors du fais que je vois deux regexp identique, ce qui m'echappe...

    Je pense que vous ne réinitialisez le pointeur de la regexp entre deux tentatives de match.
    essayez de faire un match sur une chaine vide entre chaque match ...

    Sinon matchez sur la reg elle même:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var valeur = 'Jean';
    return valeur.match(/^[ \-\w\x80-\xFF]+$/);

    Mais en tout état de cause dans l'optique de tester un pattern il vaut mieux utiliser test ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    prenom="Jean"
    alert(/^[ \-\w\x80-\xFF]+$/.test(prenom))
    truc="DR"
    alert(/^[ \-\w\x80-\xFF]+$/.test(truc))
    machin="BARDOL"
    alert(/^[ \-\w\x80-\xFF]+$/.test(machin))

  3. #3
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Salut,

    Juste pour réagir sur le prologue XML...

    Ce dernier est :
    • facultatif pour les pages servies en "text/html".
      Le fichier sera toujours analysé comme un fichier HTML "classique".
      Mais IE bascule en quircks mode (modèle de mise en page erroné).
    • obligatoire pour les pages servies en "application/xhtml+xml"
      Le fichier sera considéré comme un "vrai" fichier XML.
      IE (encore lui) ne les gère même pas.

  4. #4
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    Par défaut
    Quand je regarde les caractères de \x80 à \xFF, je vois des trucs qui n'ont rien à faire dans un nom ou un prénom... Mais selon la spécif, JavaScript utilise ISO-8859-15 et pas ISO-8859-1, le problème est peut-être là.

    Par contre quand la regexp n'a pas de flag g, la méthode test() n'a pas d'effet de bord, on peut l'utiliser sans surprises. Et je conseille de n'avoir qu'une regexp et la réutiliser, car derrière toute instanciation de regexp il y a une compilation, potentiellement longue.

    Quant au standard... A l'heure actuelle, un prologue XML dans un document servi comme du HTML fait passer quelques navigateurs en mode quirks, quand d'autres plus anciens ne savent carrément pas le traiter. Il vaut mieux se contenter d'un bon vieux DOCTYPE.


  5. #5
    Membre régulier
    Inscrit en
    Octobre 2007
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 209
    Points : 120
    Points
    120
    Par défaut
    Bonjour,
    Merci de tous ces conseils et propositions.
    Je m'attèle à modifier et améliorer.
    Evidemment les deux patterns sont différents dans le code, j'ai juste mal fait le copier coller dans le message
    J'espère que tout va vite rentrer dans l'ordre.
    Merci

  6. #6
    Membre régulier
    Inscrit en
    Octobre 2007
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 209
    Points : 120
    Points
    120
    Par défaut
    Voici le code de la méthode qui vérifie les champs :
    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
    onSoumet.prototype.lesReg = function(champ, valeur){
            this.ReReg['Cheque'] = /^[,0-9]+$/;
            this.ReReg['Titre'] = /^[^-][[:alpha:]-][^-]+$/;
            this.ReReg['Nom'] = /^[^-][[:alpha:]-][^-]+$/;
            this.ReReg['pre'] = /^[^-][[:alpha:]-][^-]+$/;
            this.ReREg['ad1'] = /^[^<>*]+$/;
            this.ReREg['ad2'] = /^[^<>*]+$/;
            this.ReREg['cp'] = /^[ 0-9\.]+$/;
            this.ReReg['Tel1'] = /^[ 0-9\.]+$/;
            this.ReReg['Tel2'] = /^[ 0-9\.]+$/;
            this.ReReg['Tel3'] = /^[ 0-9\.]+$/;
            this.ReReg['Port1'] = /^[ 0-9\.]+$/;
            this.ReReg['Fax'] = /^[ 0-9\.]+$/;
            this.ReReg['email1'] = /^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,4}\$/;
            this.ReReg['email2'] = /^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,4}\$/;
            return (this.ReReg[champ].test(valeur))
        };
    Et bien, firebugg signale
    this.ReREg is undefined this.ReREg['ad1'] = /^[^<>*]+$/; line148

    J'ai bien sûr effectué le test de cette seule expression ailleurs et là tout est Ok.
    Comprenez vous pourquoi ? Car moi :-/
    Merci

  7. #7
    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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    essaye d'echapper < ou > \< \>

  8. #8
    Membre régulier
    Inscrit en
    Octobre 2007
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 209
    Points : 120
    Points
    120
    Par défaut
    Hélas, même en échappant, l'erreur survient.
    Vous arrive-t-il parfois de désespérer avec javascript et les différents niveaux du DOM (+ différences entre navigateurs) car ici
    Merci

  9. #9
    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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    le desespoir e la compatibilité est sans fond ^^

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var reg=  /^[^<>*]+$/;
    var chaine="mjmljmlkj"
    alert(reg.test(chaine))
    pas de souci avec ça chez moi ...

  10. #10
    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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    et accessoirement

  11. #11
    Membre régulier
    Inscrit en
    Octobre 2007
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 209
    Points : 120
    Points
    120
    Par défaut
    Ici aussi tout va bien dans le simple test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var reg=  /^[^<>*]+$/;
    var chaine="mjmljmlkj"
    alert(reg.test(chaine))
    C'est lorsque nous bouclons les champs
    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
    onSoumet.prototype.fpm = function(){
            var that = this;
            var validons = true;
            var tb = [];
            tb[0] = 'Titre'; tb[1]='Nom' ;tb[2]='pre' ; tb[3] = 'ad1';
            tb[4] = 'ad2'; tb[5] = 'cp'; tb[6]= 'Ville';
            tb[7]='Tel1' ; tb[8]='Tel2' ; tb[9]='Tel3' ; tb[10] = 'Fax';
            tb[11]= 'Port1'; tb[12]= 'Port2'; tb[13]= 'email1'; tb[14]='email2' ;
            for(var i=0; i<15; i++){
                var champ = document.getElementById(tb[i]);
                if(champ != null){
                    var item = document.getElementById(tb[i]).value;
                    if((item != null)&&(item.length > 1)){
                        if(! that.valide(tb[i], item)){
                            alert(that.leMessage);
                            validons = false;
                            i = 11;
                        }
                    }
                }
            }
            return validons;
        };
    Que pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.ReREg['ad1'] = /^[^<>*]+$/;
    l'erreur se produit.
    Si nous le faisons "à la main" champ par champ "tout baigne".
    Il y a vraiment une chose au moins qui m'échappe complètement !

  12. #12
    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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    je répète :


    ReREg != ReReg

  13. #13
    Membre régulier
    Inscrit en
    Octobre 2007
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 209
    Points : 120
    Points
    120
    Par défaut




    MERCI !

  14. #14
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    Par défaut
    Règle numéro 1 : plus une chose t'échappe, plus elle est stupide. La solution c'est d'aller prendre un café.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. La chasse aux bugs (jeu d'Echecs)
    Par Sub0 dans le forum Développement 2D, 3D et Jeux
    Réponses: 117
    Dernier message: 06/11/2008, 09h46
  2. [CR][VB.NET] Echec de connexion
    Par Shuret dans le forum SDK
    Réponses: 5
    Dernier message: 15/09/2004, 10h46
  3. empecher win98 de booter en mode sans echec
    Par altahir007 dans le forum Windows
    Réponses: 3
    Dernier message: 03/12/2003, 13h49
  4. "Match nul"
    Par Sylvain James dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 17/06/2003, 10h27
  5. template match="node() mais pas text()"
    Par Manu_Just dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 26/03/2003, 10h52

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