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 :

JS + Expression rationnelle : afficher ce qui NE match PAS


Sujet :

JavaScript

  1. #1
    Invité
    Invité(e)
    Par défaut JS + Expression rationnelle : afficher ce qui NE match PAS
    Bonjour,
    J'appelle souvent ce genre de code pour afficher (dans un formulaire par exemple) si le contenu saisi est valide (true) ou pas (false) sur un .change (JQuery).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function libelleValide(str){
    	var res="";
    	if (str) {
    		var re = new RegExp('^\\w+([-\' ]\\w+)*$');
    		str=str.toLowerCase();
    		str=supprimeAccents(str);
    		res=re.exec(str);
    	}
    	return (res);
    }
    Aujourd'hui je me pose une question : si je voulais aller plus loin (afficher ce qui ne match pas en cas d'erreur), comment pourrais-je m'y prendre ?
    Exemple : si str est "ce texte n+est pas valide" retourner par exemple "+" ou "ce texte n#+#est pas valide" ou n'importe quoi que je puisse traiter pour affichage plus explicite que "c'est pas correct/conforme"

    Une idée (qui ne soit pas une usine à gaz) ?

  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 658
    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 658
    Billets dans le blog
    1
    Par défaut
    Faire un replace de ce qui ne matche pas en y ajoutant une balise strong autour avec un style color red ...
    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
    Invité
    Invité(e)
    Par défaut
    Merci pour votre réponse.
    Je m'aperçois que je me suis mal exprimé...
    Ma question était plutôt : comment détecté ce qui ne match pas.

  4. #4
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Bonjour,
    change d'approche, testes si les caractères non souhaités sont dans ta chaine.
    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
    function getNok(str) {
        var tmp;
        var nok = '+-/:'.split('');
        var i, nb = nok.length;
        for (i = 0; i < nb; i += 1) {
            tmp = str.split(nok[i]);
            str = tmp.join('#' + nok[i] + '#'); // pour peu que les # n'appartiennent pas aux nok !
        }
        return str;
    }
    var strOK  = 'ce texte est pas valide';
    var strNOK = 'ce texte + n\'est pas va +lide';
     
    console.log(getNok(strOK) !== strOK);   // false
    console.log(getNok(strNOK));            // ce texte #+# n'est pas va #+#lide
    console.log(getNok(strNOK) !== strNOK); // true

  5. #5
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    comme il est toujours bon de tester ces expressions

    https://regex101.com/

    A+JYT

  6. #6
    Invité
    Invité(e)
    Par défaut
    Merci pour vos réponses.
    Citation Envoyé par NoSmoking Voir le message
    Bonjour,
    change d'approche, testes si les caractères non souhaités sont dans ta chaine.
    Je comprends votre approche, mais ça nécessiterait que je connaisse tout ce qu'un internaute est susceptible de vouloir saisir ça n'est pas réaliste pour mon cas.

    Citation Envoyé par sekaijin Voir le message
    comme il est toujours bon de tester ces expressions
    https://regex101.com/
    A+JYT
    C'est amusant ce site (il me semble m'être déjà amusé avec... à moins que ce soit un autre similaire...), je voudrais faire exactement le contraire justement : coloré ce qui ne match pas

  7. #7
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    mais ça nécessiterait que je connaisse tout ce qu'un internaute est susceptible de vouloir saisir...
    Certes mais tu sais au moins ce que tu autorises, donc le reste est autorisé et faire un [^a-z] ou plus large !

    Sur base de ton code initial tu pourrais faire un truc dans le genre
    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
    function libelleValide(str) {
        var res = '';
        var re = new RegExp('^\\w+([-\']\\w+)*$');
        var i, nb;
     
        str = str.toLowerCase();
        str = supprimeAccents(str);
     
        if (str) {
            res = re.exec(str);
     
            // si Nok détecté
            if (!res) {
                str = str.split('');
                // parcours des caratères de la chaine
                for (i = 0, nb = str.length; i < nb; i += 1) {
                    if (str[i] !== ' ') {
                        // test caractère
                        res = re.exec(str[i]);
                        // si Nok détecté
                        if (!res) {
                            str[i] = '<b>' + str[i] + '</b>'; // mise en gras
                        }
                    }
                }
                // reconstruit la chaine
                str = str.join('');
            }
        }
        // retourne la chaine
        return (str);
    }
    var strOK  = 'ce texte est valide';
    var strNOK = 'ce texte + n\'est pas va +lide';
     
    console.log(libelleValide(strOK) !== strOK);     // false
    console.log(libelleValide(strNOK));              // ce texte <b>+</b> n<b>'</b>est pas va <b>+</b>lide
    console.log(libelleValide(strNOK) !== strNOK);   // true

Discussions similaires

  1. Réponses: 6
    Dernier message: 27/02/2011, 10h21
  2. Réponses: 1
    Dernier message: 15/02/2008, 16h20
  3. Noeud qui ne match pas avec attribut "xmlns"
    Par bouba dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 16/12/2007, 11h58
  4. Une expression qui ne match pas ?
    Par krusty dans le forum Langage
    Réponses: 3
    Dernier message: 27/03/2007, 14h55
  5. Réponses: 8
    Dernier message: 01/03/2007, 08h44

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