coucou

Je fais un formulaire avec un numéro de téléphone. Mais je voudrais juste prendre le signe + , l'espace et les chiffres dans mon <input type='text' /> . Excepté +, espace et chiffres, le formulaire ne sera pas validé.

J'ai regardé sur plein de forum concernant les regex mais je m'en sort pas du tout.

Si quelqu'un avait une idée. Merci
salut
pourquoi déjà ne pas utiliser un "input" type "tel", c'est prévu pour et ça a son avantage côté smartphones. La regexp est plutôt simple mais peut que tu devrais aussi prévoir les "." ou les "-".

<input type="tel" pattern="^\+?\s*(\d+\s?){8,}$" required />
Modérateur
@Zelaisan : si j'écris ceci : +33 01 02 03 04 05 06 07 08 09 10 11 12 13 46 565 etc. ce sera pris en compte.... Smiley cligne Le quantificateur est mauvais.


Ces jours ci, j'ai dû faire une vérif sur un champ tél. La Regex est plus simple et accepte espace ou pas ou les traits union ou pas.

var motifTel = /(\+\d+(\s|-))?0\d(\s|-)?(\d{2}(\s|-)?){4}/
/*
match sur :
0102030405
+33 01 02 03 04 05
+49-01-02-03-04-05
+330102030405
01-02-03-04-05
etc.
*/

J'ai mis un peu de temps pour concevoir le motif initial sans l'indicatif international? tu peux te reposer sur cette base :

var motifTel = /^0\d(\s|-)?(\d{2}(\s|-)?){4}$/;


Par contre le zéro est obligatoire dans ces deux motifs. Il faudra retravailler cet aspect si besoin.
Modifié par niuxe (06 Nov 2013 - 17:17)
Smiley sweatdrop ok les amis mais là je comprends rien, quesqu'il devrait se passer quand on utilise ces patterns? je cherche les réponses sur le net mais en vain.

Je comprends que dalle. Smiley confused
niuxe a écrit :
@Zelaisan : si j'écris ceci : +33 01 02 03 04 05 06 07 08 09 10 11 12 13 46 565 etc. ce sera pris en compte.... Smiley cligne Le quantificateur est mauvais.


Bin tu peux... Le nombre de numéros diffère selon les pays et c'est fait exprès de ne pas limiter Smiley cligne J'ai bien écris {8,} donc j'aurais pu limiter si je le voulais Smiley cligne

EDIT: Les pattern servent à vérifier la syntaxe par le navigateur. Cela dit c'est du HTML5 donc les vieux navigateurs ne les interpréteront pas. Ça reste une expression régulière qui peut être reprise en JS, ça sera exactement la même.
Modifié par Zelalsan (06 Nov 2013 - 17:07)
Modérateur
Zelalsan a écrit :
[quote=niuxe]@Zelaisan : si j'écris ceci : +33 01 02 03 04 05 06 07 08 09 10 11 12 13 46 565 etc. ce sera pris en compte.... Smiley cligne Le quantificateur est mauvais.

Bin tu peux... Le nombre de numéros diffère selon les pays et c'est fait exprès de ne pas limiter Smiley cligne J'ai bien écris {8,} donc j'aurais pu limiter si je le voulais Smiley cligne


Ah oui, j'ai pas pensé à cela. Smiley confused Par contre, je confirme que ton quantificateur tel qu'il est écrit prendra toute une suite de chiffre par la suite. J'ai testé ton motif sur : http://www.lumadis.be/regex/test_regex.php

@nancyAlex : Montre nous le pattern que tu as écrit stp.
Modifié par niuxe (06 Nov 2013 - 17:14)
Bonjour à toutes et à tous.

J'ai des questions au sujet de la saisie de ces numéros de téléphone.

1) ce numéro de téléphone est-il juste informationnelle ou a-t-il une quelconque utilité ?
Je dis cela car des organisme demande le numéro d'une personne mais pour des économies de coûts n'est jamais utilisé.

2) ce sont des numéros de téléphone français uniquement ou accepte-t-on tous les pays étrangers ?
Ne pas oublier qu'aux états-unis, un numéro de téléphone peut recevoir des lettres.

3) je suppose qu'un format text (input type="text") n'est pas suffisant.
Dans ce cas là, quel est le format que tu préconises ?

4) au lieu d'un seule zone de saisie, ne serait-il pas plus judicieux de le décomposer ?
La norme indique qu'un numéro de téléphone soit au format international.

exemple : +33 123456789 - 1234

--> une séquence indiquant que l'on souhaite sortir de son pays : "+".
--> l'identifiant du pays de destination : "33" c'est la France.
--> le numéro local au pays : 123456789, neuf numéro pour la France. On n'indique pas le zéro du début.
--> un tiret de séparation
--> numéro de poste s'il y a lieu : ici c'est juste un exemple bidon.

En procédant ainsi, nul besoin de faire des expressions régulières.
Un regex vérifie la syntaxe de la saisie et non que le numéro existe ou pas !

@+
tournikoti a écrit :

Ne pas oublier qu'aux états-unis, un numéro de téléphone peut recevoir des lettres.


tournikoti a écrit :

Un regex vérifie la syntaxe de la saisie et non que le numéro existe ou pas !


C'est effectivement très divertissant à l'heure du dîner, mais ça commence réellement à se voir là ... Smiley sweatdrop
Salut,

Je m'étais penché sur la question, en m'arrachant les cheveux avec les numéros internationnaux... Depuis j'utilise ceci (version php, une ressource en ligne dont j'ai oublié la trace) :
if (!preg_match("#^((\+\d{1,3}(-| )?\(?\d\)?(-| )?\d{1,5})|(\(?\d{2,6}\)?))(-| )?(\d{3,4})(-| )?(\d{4})(( x| ext)\d{1,5}){0,1}$#", $tel))

Et ça marche nickel.
Modifié par Olivier C (10 Nov 2013 - 10:03)
Olivier C, je crains que pour un numéro : type 0n nn nn nn nn, ça le fasse pas.
Du coup, j'ai précisé la restriction pour les espaces dans mon message d'erreur.
Merci pour la ressource.
A ce niveau, pour ma part je suis largué. Smiley cligne