regexp : téléphone

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par rudddy, 13 Avril 2010.

  1. rudddy
    rudddy WRInaute passionné
    Inscrit:
    1 Août 2007
    Messages:
    2 125
    J'aime reçus:
    0
    Bonjour,

    j'aimerais contrôler un champ téléphone de formulaire suivant les précisions suivantes :
    - 7 chiffres au min (au max, je m'en fiche)
    - que des chiffres
    - 5 caractères spéciaux autorisés : -, _, ESPACE, /, .

    J'ai trouvé cela :
    Code:
    /^0[0-9]([ .-]?[0-9]{2}){4}$/;
    mais c'est sur 10 chiffres et ne correspond pas à mes caractères spéciaux

    merci à vous
     
  2. medium69
    medium69 WRInaute passionné
    Inscrit:
    7 Mai 2005
    Messages:
    1 940
    J'aime reçus:
    3
    Donne un aperçu de ce que pourrait être ton numéro.
     
  3. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    3 577
    J'aime reçus:
    32
    Bonjour

    Je ne connais pas les regexp mode prcre, du moins pas le cas des évaluations conditionnelles suivant les valeurs déjà rencontrées.

    Il faudrait au moins pouvoir mémoriser le nombre de chiffres, et peut-être aussi, des autres caractères ( ce que tu ne dis pas ).

    Il faudrait une description formelle plus complète de la logique que tu souhaite, pour les numéros de téléphone.

    Ou bien chercher sur Google... ;)

    Bien à vous.

    Amicalement.

    Jean-François Ortolo
     
  4. rudddy
    rudddy WRInaute passionné
    Inscrit:
    1 Août 2007
    Messages:
    2 125
    J'aime reçus:
    0
    merci à toi jf

    et aussi medium ;-)

    voici mes exemples de bons numéros :

    01.02.03.04.05
    01-02-03-04-05
    01/02.03.04.05
    01 02 03 04 05
    0102030405

    mais aussi

    331.02.03.04.05
    221-02-03-04-05
    151/02.03.04.05
    541 02 03 04 05

    en gros tout ce que les gens ont l'habitude taper quand ils entrent des téléphones !
     
  5. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    3 577
    J'aime reçus:
    32
    Bonjour

    Dans ce cas, pour résoudre le problème, il me semble qu'il y a une condtion nécessaire et suffisante : C'est que tu sache et indique, toutes les possibilités de types de séquences de caractères, de manière exhaustive.

    La deuxième option, serait de donner, une ou plusieurs formules ( mettons, algorithmiques ), pour valider un numéro de téléphone.

    Dans le premier cas, il sera possible de fabriquer une regexp de type posix, répondant à ce que tu souhaites, simplement en faisant une construction du type :

    "^(regexp1)|(regexp2)|(regexp3)|...|(regexpn)$"

    Dans le deuxième cas, on verra ce qu'on peut faire... ;)

    Bien à vous.

    Amicalement.

    Jean-François Ortolo
     
  6. DadouDuck
    DadouDuck WRInaute impliqué
    Inscrit:
    28 Mai 2007
    Messages:
    812
    J'aime reçus:
    0
    Il y a trop de formatages possible, c'est à toi d'imposer comment les numéros doivent être entrés et par regex tu boules tous les autres
     
  7. medium69
    medium69 WRInaute passionné
    Inscrit:
    7 Mai 2005
    Messages:
    1 940
    J'aime reçus:
    3
    Une solution alternative autrement :

    Dans un premier temps, tu ne garde que les chiffres.
    Dans un second temps, tu vérifies qu'il y en est au moins 7.

    Mais à mon avis, tu acceptes les N° de plusieurs pays avec ses conditions. donc fiabilité pas géniale.
     
  8. rudddy
    rudddy WRInaute passionné
    Inscrit:
    1 Août 2007
    Messages:
    2 125
    J'aime reçus:
    0
    merci de vos avis.
    @medium : oui c'est un site multinational

    je pourrais faire peut etre un
    $tel = eregi_replace("[^0-9]", "", $tel);
    pour ne garder que les chiffres

    mais ça ne résoudra pas le fait que si les gens tapent des lettres cela bugguera

    et sachez que bcp tapent la lettre O à la place du 0 et j'en passe (j'ai vu passer une centaine de milliers de téléphone, donc je sais de quoi je parles)

    ou alors bloquer les touches génantes dès le clic sur la touche mais c'est pas trop user friendly à mon goût
    ex :

    Code:
    function valid_tel(evt) {
    	var keyCode = evt.which ? evt.which : evt.keyCode;
    	var interdit = 'azertyuiopqsdfghjklmwxcvbnàâäãçéèêëìîïòôöõùûüñ -+&*?!:;.,\t#~"^¨%$£?²¤§%*()[]{}<>|\\/`\'';
    	if (interdit.indexOf(String.fromCharCode(keyCode)) >= 0) {
    		return false;
    	}
    }
    
     
  9. medium69
    medium69 WRInaute passionné
    Inscrit:
    7 Mai 2005
    Messages:
    1 940
    J'aime reçus:
    3
    Dans ce cas, un premier contrôle sommaire pour voir que le tel ne contient que des caractères autorisés.

    Un second traitement, tu ne garde que les chiffres.

    3eme traitement, deux options :
    :arrow: Tu contrôle un minimum de 7 chiffres.
    :arrow: Tu contrôle le nombre de chiffre en relation avec le format du pays concerné (y compris numérotation internationale 033 pour la France il me semble)

    Tu ne peux pas faire vraiment autre chose...
     
  10. jcaron
    jcaron WRInaute accro
    Inscrit:
    13 Février 2004
    Messages:
    2 579
    J'aime reçus:
    0
    '#[-0-9_ /.]{7,}#'

    Jacques.
     
  11. rudddy
    rudddy WRInaute passionné
    Inscrit:
    1 Août 2007
    Messages:
    2 125
    J'aime reçus:
    0
    merci jacques je vais le tester.

    juste une ptite question bébéte : en js ça donne quoi car il y a des caractères à échapper non ?
     
  12. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    3 577
    J'aime reçus:
    32

    Le caractère point ( . ) dans une regexp, signifie n'importe quel caractère.

    Il faut donc échapper le point ( \. au lieu de . ).

    Quant au reste : l'underscore _ je ne crois pas mais ça ne mange pas de pain, le tiret en début de regexp pas besoin ( mais besoin d'échapper le tiret - en \- si ailleurs qu'en tout début de regexp, sinon c'est un intervalle de caractères. )

    Je crois qu'il faut échapper le slash aussi ( \/ au lieu de / ), mais je ne suis pas sûr qu'il ne faille pas mettre : // au lieu de / J'ai un doute à propos des regexp du logiciel awk.

    Enfin bref, j'ai pas encore l'Alzeihmer, mais ça ne saurait tarder... ;)

    Et puis, il n'y a théoriquement pas de problème à échapper tout qui lève un doute, vu que par exemple, dans une regexp, \a est équivalent à a

    Mes deux cents...

    Bien à vous.

    Amicalement.

    Jean-François Ortolo
     
  13. jcaron
    jcaron WRInaute accro
    Inscrit:
    13 Février 2004
    Messages:
    2 579
    J'aime reçus:
    0
    Non, dans une classe (entre des crochets []), le . est un caractère comme un autre, tout comme ?, *, etc.

    Les seuls caractères qui ont une signification particulière sont le - (qui doit toujours être au début, sinon c'est une étendue genre A-Z), le \ (qui en PCRE sert à introduire certaines séquences type \d, \w, etc, et qui doit être échappé), le ] évidemment (à échapper), ^ en début de classe (négation, à échapper), et probablement [ (début de [:pseudoclasse:])

    Evidemment le / doit toujours être échappé s'il est utilisé comme délimiteur, ce qui est forcément le cas en JS il me semble, non?

    Jacques.
     
  14. rudddy
    rudddy WRInaute passionné
    Inscrit:
    1 Août 2007
    Messages:
    2 125
    J'aime reçus:
    0
    alors là :

    merci jf ta regex c'est du feu atomique
    et merci jcaron, il fallait effectivement échapper le \

    Merci vous êtes des tueurs
    j'ai un dilemme à qui mettre la reco :-(

    on peut pas en mettre 2 ?
     
  15. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    3 577
    J'aime reçus:
    32
    Bonjour ;)

    Moi, moi, moi ;)

    ...

    Bien à vous.

    Amicalement.

    Jean-François Ortolo
     
  16. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    3 577
    J'aime reçus:
    32

    Bonjour

    Au risque de sembler un peu têtu, il semble que dans le cas des regexp type prcre, il ne soit pas nécessaire que la regexp soit entre [ ] pour que les caractère spéciaux soient considérés comme tels.

    Par contre, dans une regexp type posix ( c'est probablement le cas, si c'est en JS ), c'est le cas.

    Enfin, je crois ( merci de me contredire si c'est faux pour du pcre ) que, que ce soit pour du posix ou du pcre, le point est un caractère spécial signifiant : n'importe quel caractère.

    J'ai cru comprendre que ce problème se posait dans un contexte Javascript, dans ce cas, ces regexp ne sont-elles pas toujours du type posix ?

    A part çà, pour du php et autres langages, celà dépend des instructions choisies ( posix ou pcre ), mais la regexp donnée ci-dessus, est de la norme pcre.

    ...Maintenant, j'attends le verdict : Alzeihmer, pas Alzeihmer ? ;)

    Bien à vous.

    Amicalement.

    Jean-François Ortolo
     
  17. rudddy
    rudddy WRInaute passionné
    Inscrit:
    1 Août 2007
    Messages:
    2 125
    J'aime reçus:
    0
    alors c'est carrément sûr que tu as alzHeimer :mrgreen:
     
  18. medium69
    medium69 WRInaute passionné
    Inscrit:
    7 Mai 2005
    Messages:
    1 940
    J'aime reçus:
    3

    Attention, avec ce cas de figure, il accepte 7 caractères au minimum ; pas seulement 7 chiffres au minimum ;)
     
  19. rudddy
    rudddy WRInaute passionné
    Inscrit:
    1 Août 2007
    Messages:
    2 125
    J'aime reçus:
    0
    non si je tape
    'abcdefghie'

    j'ai bien une erreur !
     
  20. jcaron
    jcaron WRInaute accro
    Inscrit:
    13 Février 2004
    Messages:
    2 579
    J'aime reçus:
    0
    Il n'est pas nécessaire de mettre les caractères spéciaux dans des [], mais dans des [], la plupart (.?*+{} etc.) ne sont pas interprétés de la même façon, et c'est normal (ça ne voudrait pas dire grand chose). C'est valable aussi bien en PCRE qu'en POSIX. Pareil, dans les deux cas, on peut utiliser des \ pour escaper ces caractères en dehors des [].

    A l'intérieur de [], la différence entre les deux va concerner les séquences \x qui n'existent pas et \ ne peut pas être utilisé pour escaper en POSIX (alors qu'il peut l'être en PCRE).

    La regex fournie plus haut doit normalement fonctionner aussi bien en POSIX qu'en PCRE, aux délimiteurs près (qui dépend plus du langage que de l'implémentation, réellement).

    Jacques.
     
  21. jcaron
    jcaron WRInaute accro
    Inscrit:
    13 Février 2004
    Messages:
    2 579
    J'aime reçus:
    0
    En effet. Si on veut absolument avoir 7 chiffres, il faut faire un peu plus compliqué, par exemple:

    #([0-9][-_ /.]*){7,}#

    (c'est une simplification, elle permet d'avoir les autres caractères entre les chiffres et à la fin, mais pas au début, si on veut vraiment être tatillon on ne les permettra probablement qu'entre les chiffres, ou alors entre, à la fin mais aussi au début).

    Mea culpa :)

    Jacques.
     
  22. rudddy
    rudddy WRInaute passionné
    Inscrit:
    1 Août 2007
    Messages:
    2 125
    J'aime reçus:
    0
    non chez moi ça fonctionne nickel : http://www.les-maisons-de-retraite.com/EHPAD-alzheimer.html
    :wink:
    teste en ne travaillant que sur la champ tél stp
     
  23. jcaron
    jcaron WRInaute accro
    Inscrit:
    13 Février 2004
    Messages:
    2 579
    J'aime reçus:
    0
    Ce qu'il veut dire, c'est que tu peux taper 1-----2 et que ça va passer (il y a 7 caractères qui correspondent à ce qui est autorisé, mais il n'y a que 2 chiffres). Si tu veux qu'il y ait absolument au moins 7 chiffres (sans compter les autres caractères), l'autre regex est plus stricte.

    Jacques.
     
Chargement...
Similar Threads - regexp téléphone Forum Date
RegExp du Rewrite URL Rewriting et .htaccess 19 Décembre 2019
Expression régulière MySql REGEXP pour transformer des liens Développement d'un site Web ou d'une appli mobile 26 Septembre 2011
Gestion des variables regexp Développement d'un site Web ou d'une appli mobile 23 Juillet 2011
[PHP] Comment valider une regexp Développement d'un site Web ou d'une appli mobile 9 Juin 2010
pas compris ce code REGEXP Administration d'un site Web 10 Février 2010
Probleme 2 condition SQL regexp ou like Développement d'un site Web ou d'une appli mobile 27 Juin 2009
regexp URL Rewriting et .htaccess 20 Juin 2009
Requete sql avec REGEXP Problèmes de référencement spécifiques à vos sites 4 Juin 2009
regexp possible ou pas Développement d'un site Web ou d'une appli mobile 11 Mars 2009
Regexp test marche mais pas le lien réel URL Rewriting et .htaccess 18 Août 2008
(je me noie) Pour les pros des REGEXP Développement d'un site Web ou d'une appli mobile 23 Mars 2008
[RegExp] Détecter toutes sortes de liens Développement d'un site Web ou d'une appli mobile 1 Avril 2007
Probleme Url rewriting+regexp URL Rewriting et .htaccess 23 Mars 2007
Regexp remplacement de chaîne dans certains cas Développement d'un site Web ou d'une appli mobile 19 Janvier 2007
Regexp toute bête Développement d'un site Web ou d'une appli mobile 10 Janvier 2007
Problème regexp pour parser fichier html Développement d'un site Web ou d'une appli mobile 28 Décembre 2006
Souci de regexp pour traitement de code html Développement d'un site Web ou d'une appli mobile 26 Décembre 2006
Petit probleme regexp Développement d'un site Web ou d'une appli mobile 23 Août 2006
Aux pros de la regexp Développement d'un site Web ou d'une appli mobile 3 Août 2006
[résolu] mysql et regexp Développement d'un site Web ou d'une appli mobile 3 Août 2006