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 :

ne garder que l'alpha


Sujet :

JavaScript

  1. #1
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut ne garder que l'alpha
    Bonjour,

    Sur un formulaire, je demande le prénom. je veux récupérer que la partie alpha quelque soit les erreurs de saisie (espace en trop, ponctuation, caractère spéciaux)

    J'ai donc fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if(!formulaire_champ.value.match( [a-zA-Z] )){alert("Erreur")}
    Mais il accepte tout, c'est une vrai passoire.

    Merci pour vos éclaircissements

  2. #2
    Expert confirmé
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    Attention à la syntaxe de ta regexp

    Soit tu utilises un littéral entre "/", soit tu utilises une chaine, mais là ce que tu passes en argument à match n'est ni une chaine ni une regexp.

    Je te conseillerais donc plutôt quelque chose comme :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ((/[^a-z\-]/i).test(formulaire_champ.value)) {
       alert("Le prénom saisi comporte des caractères invalides");
    }
    De plus, comme tu le vois, je te conseillerais d'utiliser Regexp.test plutôt que String.match, dans la mesure où ce n'est qu'un test booléen au final, et que tu n'as pas besoin du "compte-rendu détaillé" que renvoie match.

    Autre détail : tu ne veux pas accepter les "-" ? Et mon pote Jean-Claude alors ? (je l'ai ajouté à la regexp dans mon exemple, mais si pour une quelconque raison ça ne te plaisait pas, garde
    J'en ai même profité pour te suggérer un message un peu plus "informatif"

  3. #3
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    Merci.

    Pardon pour ton pote jean-claude, mais je dois enregistrer à la norme postal, c'est à dire en majuscule, sans accent, sans ponctuation ni caractères spéciaux.

    Donc le plus simple ce serait que je remplace tout à la saisie pour ne garder que les lettres

    Donc quelque chose comme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    formulaire_champ.value.replace(/[^a-z]/i, '')
    Mais il faudrait que je puisse dire ce qui est différent de /[^a-z]/i, doit être remplacé par des espaces et ensuite ne garder qu'un seul espace entre chaque mot.

  4. #4
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    Jean claude sans "-", donc avec un espace ne passe pas

    Pour accepter espace c'est "\s" je crois.

    mon expression va donc être


  5. #5
    Expert confirmé
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    Heu... attends

    On parlait au départ d'un test affichant un alert. Là, on est dans l'automatisation avec un replace.
    Alors donc ... l'utilisateur est censé corriger ou bien c'est le JS ? ^^

    Sinon, à part ça attention, pour désigner un espace, utilise un vrai espace, pas "\s", à moins que tu veuilles aussi accepter les tabulations, retours chariot, etc.

    Enfin, pour que ton replace fonctionne sur toutes les occurrences de la regexp dans la chaine (par exemple en cas de "Jean-François-Xavier" ou autre bizarrerie), ajoute le modificateur "g" après le littéral de la regexp (à côté du "i")

  6. #6
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    Oui au départ c'était un alert, mais ta remarque sur ton ami Jean-claude était bonne.

    Plutôt que d'afficher un alerte, autant corriger en JS la saisie.

    Je ne sais pas comment faire, mais j'ai retenu l'idée.

    C'est bien d'un espace entre chaque mot dont j'ai besoin, pas d'une tabu ou d'un saut de ligne.

    Et pour Jean françois xavier, mon expression ne fonctionne pas en faisant Si je veux remplacer tout ce qui n'est pas alpha je fais ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    champ.replace(/[^a-z\s]/i, ' ')

  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 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    champ.replace(/[^a-z ]/i, ' ')

    ne remplacera pas les -
    mais je ne vois pas l'intérêt de remplacer un espace par un espace ...

  8. #8
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    Jean-françois-xavier doit devenir jean françois xavier

    Jean_yes doit devenir jean yves

    Jean-claude@ avec un caractère mal saisie "@" doit devenir jean claude

    etc...

  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 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    champ.replace(/[^a-z]/i, '')

  10. #10
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    Merci beaucoup.

    Il me perdait le "ç" de jean-françois-xavier et ne remplaçait qu'un seul "-", alors j'ai fait comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    formulaire_champ = formulaire.client_prenom.value.replace(/[^a-zA-Z0-9Ç]]/ig, ' ');
    De plus tous les caractères spéciaux sont supprimés

  11. #11
    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 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    formulaire_champ = formulaire.client_prenom.value.replace(/[^a-zç-]]/ig, ' ');
    devrait suffire...
    je pense que tu devras aussi rajouter les caractères accentués ...

  12. #12
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    J'espère ne rien avoir oublié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var formulaire_champ = formulaire.client_prenom.value.replace(/[^a-zÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ]/ig, ' ');
    Merci

  13. #13
    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 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    a priori si tu mets i ... pas besoin de mettre les majuscules ?

  14. #14
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    Ok j'ai vu "i" c'est insensible à la casse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var formulaire_champ = formulaire.client_prenom.value.replace(/[^a-zàáâãäåòóôõöøèéêëçìíîïùúûüÿñ]/ig, ' ');

  15. #15
    Expert confirmé
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    Tant qu'à faire le tour des caractères acceptables pour un prénom, y'en a qui vont dire que c'est pour pinailler mais...

    > œ et æ (par exemple pour "Lætitia")

    Par contre, je crois avoir lu quelquepart...
    Citation Envoyé par lodan
    mais je dois enregistrer à la norme postal, c'est à dire en majuscule, sans accent, sans ponctuation ni caractères spéciaux.
    nous v'la beaux

  16. #16
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    Ben oui, la norme postal n'accepte pas tout pour que les trieuses automatiques puissent reconnaître les caractères.

    Tout cela est aussi vrai pour les champ d'adresse, le nom et le prénom n'étant qu'un cas d'école.

    Merci à tous.

  17. #17
    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 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    sans accent ... alors faut faire une fonction callbalck dans le replace avec un array littéral pour les remplacements ...

  18. #18
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    ça donnerai quelque chose comme cela ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function retirerAccent(data)
    {
    var avec_accent = new Array("À","Á","Â","Ã","Ä","Å","à","á","â","ã","ä","å","Ò","Ó","Ô","Õ","Ö","Ø","ò","ó","ô","õ","ö","ø","È","É","Ê","Ë","è","é","ê","ë","Ç","ç","Ì","Í","Î","Ï","ì","í","î","ï","Ù","Ú","Û","","Ü","ù","ú","û","ü","ÿ","Ñ","ñ");
    var sans_accent = new Array("A","A","A","A","A","A","a","a","a","a","a","a","O","O","O","O","O","O","o","o","o","o","o","o","E","E","E","E","e","e","e","e","C","c","I","I","I","I","i","i","i","i","U","U","U","","U","u","u","u","u","y","N","n");
    return data.replace(avec_accent, sans_accent);
    }
    var formulaire_champ = retirerAccent(formulaire.client_prenom.value);
    var formulaire_champ = formulaire_champ.replace(/[^a-z]/ig, ' ');

  19. #19
    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 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    non ...
    le principe du strtr de php ne pass pas en js
    il faut passer par un callback dans un replace avec une regexp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var TabSpec = {"à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","è":"e","é":"e","ê":"e","ë":"e","ç":"c","ì":"i","í":"i","î":"i","ï":"i","ù":"u","ú":"u","û":"u","ü":"u","ÿ":"y","ñ":"n","-":" ","_":" "}; 
     
    function replaceSpec(Texte){
    	var reg=/[ÀÁÂÒÓÔÕÖØòÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ_-]/g; 
    	return Texte.replace(reg,function(){ return TabSpec[arguments[0].toLowerCase()];}).toLowerCase();
     	}
     
    var TestTexte="ÀÁÂÒÓÔÕÖØòÒÓÔÕ-ÖØòó_ôõöøÈÉÊËèéêëÇçÒÓÔÕÖØòÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ"
    alert(replaceSpec(TestTexte))
    [edit] petit modif pour tout convertir en lowerCase

  20. #20
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    J'ai fait une modif pour avoir majuscule ou minuscule et ça marche

    Merci

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

Discussions similaires

  1. condition: ne garder que certains alpha-numerique
    Par bibi5883 dans le forum Débuter
    Réponses: 8
    Dernier message: 12/09/2007, 16h30
  2. Réponses: 4
    Dernier message: 15/06/2007, 14h58
  3. Ne garder que le plus grand
    Par mobscene dans le forum Langage
    Réponses: 30
    Dernier message: 23/12/2005, 01h23
  4. selection avec group by mais ne garder que ...
    Par Larson dans le forum Langage SQL
    Réponses: 13
    Dernier message: 22/06/2005, 17h23
  5. [Oracle 8i] ne garder que certains enregistrements (COUNT ?)
    Par delphim dans le forum Langage SQL
    Réponses: 13
    Dernier message: 23/02/2005, 14h30

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