regexp : téléphone


rudddy
WRInaute accro
WRInaute accro
 
Messages: 2570
Inscription: 1 Aoû 2007

regexp : téléphone

Message le Mar Avr 13, 2010 15:31

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: Tout sélectionner
/^0[0-9]([ .-]?[0-9]{2}){4}$/;

mais c'est sur 10 chiffres et ne correspond pas à mes caractères spéciaux

merci à vous


medium69
WRInaute passionné
WRInaute passionné
 
Messages: 2485
Inscription: 7 Mai 2005

Re: regexp : téléphone

Message le Mar Avr 13, 2010 15:45

Donne un aperçu de ce que pourrait être ton numéro.


ortolojf
WRInaute passionné
WRInaute passionné
 
Messages: 1676
Inscription: 14 Aoû 2002

Re: regexp : téléphone

Message le Mar Avr 13, 2010 15:57

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


rudddy
WRInaute accro
WRInaute accro
 
Messages: 2570
Inscription: 1 Aoû 2007

Re: regexp : téléphone

Message le Mar Avr 13, 2010 16:33

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 !


ortolojf
WRInaute passionné
WRInaute passionné
 
Messages: 1676
Inscription: 14 Aoû 2002

Re: regexp : téléphone

Message le Mar Avr 13, 2010 16:43

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

DadouDuck
WRInaute impliqué
WRInaute impliqué
 
Messages: 910
Inscription: 28 Mai 2007

Re: regexp : téléphone

Message le Mar Avr 13, 2010 16:44

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


medium69
WRInaute passionné
WRInaute passionné
 
Messages: 2485
Inscription: 7 Mai 2005

Re: regexp : téléphone

Message le Mar Avr 13, 2010 16:48

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.


rudddy
WRInaute accro
WRInaute accro
 
Messages: 2570
Inscription: 1 Aoû 2007

Re: regexp : téléphone

Message le Mar Avr 13, 2010 16:59

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: Tout sélectionner
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;
   }
}


medium69
WRInaute passionné
WRInaute passionné
 
Messages: 2485
Inscription: 7 Mai 2005

Re: regexp : téléphone

Message le Mar Avr 13, 2010 18:10

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...

jcaron
WRInaute accro
WRInaute accro
 
Messages: 2687
Inscription: 13 Fév 2004

Re: regexp : téléphone

Message le Mer Avr 14, 2010 1:35

'#[-0-9_ /.]{7,}#'

Jacques.


rudddy
WRInaute accro
WRInaute accro
 
Messages: 2570
Inscription: 1 Aoû 2007

Re: regexp : téléphone

Message le Mer Avr 14, 2010 8:54

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 ?


ortolojf
WRInaute passionné
WRInaute passionné
 
Messages: 1676
Inscription: 14 Aoû 2002

Re: regexp : téléphone

Message le Mer Avr 14, 2010 9:40

rudddy a écrit: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 ?



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

jcaron
WRInaute accro
WRInaute accro
 
Messages: 2687
Inscription: 13 Fév 2004

Re: regexp : téléphone

Message le Mer Avr 14, 2010 11:34

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.


rudddy
WRInaute accro
WRInaute accro
 
Messages: 2570
Inscription: 1 Aoû 2007

Re: regexp : téléphone

Message le Mer Avr 14, 2010 11:43

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 ?


ortolojf
WRInaute passionné
WRInaute passionné
 
Messages: 1676
Inscription: 14 Aoû 2002

Re: regexp : téléphone

Message le Mer Avr 14, 2010 11:47

Bonjour ;)

Moi, moi, moi ;)

...

Bien à vous.

Amicalement.

Jean-François Ortolo

regexp : téléphone

Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités