Quels caractères spéciaux faut-il autoriser pour un numéro de téléphone?

20

Je conçois donc une page Web qui sera utilisée pour les utilisateurs mondiaux, comprend des utilisateurs du Canada, des États-Unis, de l'Inde, du Royaume-Uni, etc. Je dois appliquer des validations pour ce champ de numéro de téléphone, mais je ne suis pas sûr de la meilleure façon de procéder. .

Certains des formats valides auxquels je peux penser sont:

  1. 1800123456 (Inde)
  2. utilisation de "-" dans les numéros de téléphone américains

Je suis un peu confus quant aux caractères spéciaux que je dois autoriser à un utilisateur à saisir (par exemple - / ()). Comment d'autres ont-ils résolu ce problème dans le passé?

Ranger
la source
1
Qu'en est-il des numéros de téléphone exprimés par des lettres, par exemple 0800DIALTHIS?
mouviciel
3
Qu'essayez-vous d'empêcher? L'utilisateur ment? L'utilisateur ne veut pas que vous connaissiez son numéro? L'utilisateur est trop paresseux pour entrer quoi que ce soit? L'utilisateur fait une faute de frappe?
Benjol
@ mouviviel: oui, je dois aussi penser à prendre un scénario de valdation à la fois, donc j'y penserai.
Ranger
@Benjol: Cette application est une application commerciale, donc nous ne pouvons pas risquer sur nos clients. Je sais qu'un utilisateur entrera un numéro correct mais que se passera-t-il s'il ne le fait pas. La valdation est assez importante car elle enregistre les applications non seulement les fautes de frappe. Je ne veux pas que ma DB soit remplie de déchets inutiles.
Ranger
5
bien que faites-vous pour valider leurs adresses e-mail? Vous constaterez que presque tous les sites Web effectuent une validation «réelle» (c'est-à-dire vous envoient un courrier). Je pense que si le numéro de téléphone est si important, vous devrez faire quelque chose d'équivalent.
Benjol

Réponses:

21

Tout simplement parce que vous pouvez contraindre quelque chose (c'est ce pour quoi vous êtes payé, en tant que programmeur, pour écrire du code), cela ne signifie pas que vous devriez réellement le faire.

Quel est l'intérêt de valider un numéro? Pourquoi est-ce utile? Va-t-il échouer si un utilisateur entre "0800DIALTHIS", ou "私 は 電話 番号 を 持 っ て い な い", ou "(499) 123-45-67 добавочный 4425"? Ce sera sûrement le cas (vous dites «global». N'est-ce pas?), Alors que les utilisateurs voulaient simplement vous transmettre une information importante sur la façon de les contacter par téléphone.

En outre, la façon dont les données sont stockées doit être régie par la façon dont elles sont utilisées. Comment utiliserez-vous les chiffres? Seront-ils utilisés pour envoyer automatiquement des spams par SMS ou seront-ils composés manuellement par les gestionnaires? Si c'est le dernier, autoriser des caractères supplémentaires est acceptable, car le cerveau humain sera en mesure de les analyser de la manière qu'ils jugent la plus appropriée; et dans ce cas, vous n'avez pas vraiment besoin de validations, ce qui ennuiera simplement les utilisateurs humains.

P Shved
la source
7
+1 pour "les utilisateurs voulaient simplement vous transmettre une information importante". J'ai trop souvent vu une validation inutile qui ennuie simplement l'utilisateur sans aucune exigence technique (ou organisationnelle) réelle.
perdian
6
+1 - La validation du numéro de téléphone (spécialement définie de manière large) est souvent inutile, pas à l'épreuve du temps (KL5-6743 était un numéro de téléphone valide, par exemple), et agace simplement les utilisateurs qui ont des cas spéciaux. Faites de vos numéros de téléphone un grand champ de texte et laissez les numéroteurs automatisés (s'il y en a dans ce scénario) analyser ce qu'ils peuvent. Les exceptions peuvent être levées aux humains qui peuvent gérer la situation de manière appropriée.
EZ Hart
8
+1 et surtout parce qu'un numéro de téléphone est valide, cela ne signifie pas qu'il existe, et même s'il existe, cela ne signifie pas qu'il appartient à la personne en question ...
Benjol
Oh ouais, je trouverai les pays où vivent nos principaux utilisateurs et ensuite j'écrirai un code de validation. Merci à tous, j'apprécie vos efforts.
Ranger
4
@Ranger C'est exactement le contraire de la réponse.
Sebastian Redl
7

Il serait très difficile de savoir si un numéro est valide ou non, car différents pays ont des formats différents. En France, par exemple, 06 12 34 56 78 est un numéro de téléphone valide, alors que 00 12 34 56 78 ne l'est pas, car le numéro ne peut commencer que par 01 à 09, 06 et 07 étant des téléphones portables.

De plus, les numéros de téléphone peuvent être écrits dans plusieurs formats, même dans le même pays. J'ai vu:

  • 06 12 34 56 78
  • 0612345678
  • 06.12.34.56.78
  • 06-12-34-56-78
  • +33612345678
  • +33 (0) 6 12 34 56 78

les deux derniers étant la forme internationale.

En général:

  1. Autorisez les crochets, le +symbole uniquement comme caractère de tête, les tirets, les points, les virgules et les espaces.
  2. Si possible, rappelez-vous uniquement la forme normalisée (ex: +33 (0) 612345678).
  3. Si cela n'est pas possible, supprimez au moins les caractères de séparation (comme les espaces).

Il n'est pas recommandé d'aller trop loin dans la validation par pays. Non seulement il y a une grande quantité de règles, mais les règles changent également. Par exemple en France, il y a quelques années, il n'y avait pas de numéros de téléphone commençant par 07 ou 09. Avec l'augmentation du nombre de téléphones mobiles est apparu 07. Avec les services VoIP est apparu 09.

Vous pouvez également prendre en compte des numéros spéciaux. Par exemple, 3635 est un numéro valide en France, même s'il ne contient que quatre chiffres et commence par un non nul.

Arseni Mourzenko
la source
1
Il serait utile de montrer l'utilisation des crochets dans vos exemples. Les numéros internationaux les utilisent souvent pour inclure le zéro de tête de l'indicatif régional pour indiquer que vous ne le composez pas lorsque vous appelez de l'étranger. Par exemple, +31 (0)30 1234567où 31 est les Pays-Bas, 030 est l'indicatif régional et 1234567 est l'abonné.
Marjan Venema
2
N'oubliez pas un champ facultatif pour le code d'extension (qui peut nécessiter l'autorisation de la touche dièse ou astérisque).
rwong
@MarjanVenema, je ne fais pas beaucoup de numérotation internationale, mais il est standard d'ajouter le zéro et d'ajouter des crochets (0) pour vous dire de NE PAS le composer? Ne serait-il pas plus simple de simplement laisser de côté le 0?
CaffGeek
@Chad: Non. Il indique aux utilisateurs internationaux qu'ils doivent le laisser de côté et indique aux utilisateurs nationaux qu'ils doivent l'utiliser. Tous les pays n'ont pas d'indicatifs régionaux commençant par un zéro. Le faire de cette façon garantit que lorsque quelqu'un voit le numéro, il sait quoi faire quand il est à l'intérieur et quand il est hors du pays. Après tout, tous ceux qui appellent au niveau national
Marjan Venema
@MarjanVenema, oh, je vois, ne réalisait pas que les utilisateurs nationaux en avaient besoin, a appris quelque chose de nouveau aujourd'hui.
CaffGeek
3

NE restreignez PAS les caractères; prenez tout ce qu'il vous donne. Mais lorsque vous le composez, ne prenez que les chiffres. Même alors, cela pourrait mal fonctionner. J'étais en Thaïlande un an avant d'apprendre que 123-4567-9 ne signifiait pas une extension, mais une gamme de numéros, 1234567 à 1234569. Lorsque j'ai composé "12345679", cela a fonctionné, car la compagnie de téléphone a ignoré le chiffre supplémentaire. Prenez n'importe quoi, composez uniquement des chiffres.

J'adore que mon nouveau téléphone autorise des espaces dans le numéro de téléphone. Je peux entrer "123 456 7890" comme ça, pas tous écrasés ensemble.

Andy Canfield
la source
2
+100. Il n'y a rien de pire qu'un ordinateur qui dit "veuillez retirer le - du numéro", comme si l'ordinateur ne savait pas comment le faire par lui-même. Idem pour les numéros de carte de crédit, FWIW.
Bryan Oakley
0

Supports, tiret et espace.

Une fois que l'utilisateur a entré le numéro de téléphone contenant ces symboles, vous pouvez les valider selon les règles spécifiques au pays (dont vous aurez besoin pour rassembler ces règles pour chaque pays), puis les non-chiffres peuvent être supprimés lorsqu'il est traité en interne dans votre logiciel.

En effet, l'IDD (numérotation directe internationale) ne permet pas d'exiger que des "caractères spéciaux" soient effectivement utilisés pour composer un numéro, à l'exception des pauses dans la frappe des chiffres.

(Je ne connais rien du tout; veuillez me corriger si je me trompe.)

rwong
la source
3
Vous oubliez le signe \ + pour l'accès international
Marjan Venema
2
autorisez également la lettre x - au moins aux États-Unis, il est courant de préfixer une extension avec un x (par exemple: 555-1212 x123).
Bryan Oakley
0

La seule chose qui devrait être validée est le nombre de chiffres - correspond-il à ce que vous devez appeler?

Les codes d'accès ne peuvent / ne doivent pas être autorisés par un utilisateur (c'est-à-dire +1 pour les États-Unis). Je vais vous dire pourquoi - si c'est un Américain qui y entre, et qu'ils ne sont pas très avertis, ils voudront probablement entrer 001 au lieu de 1. La raison étant que 00 est la façon dont vous accédez à un numéro international depuis les États-Unis. Ils ne savent pas quelle est la différence entre cela et juste +1. Si vous appelez des lignes fixes entre des indicatifs régionaux (et parfois dans le même indicatif régional), vous devrez également saisir un 1 avant ce numéro. Tout comme le Japon.

Prenez le Japon. Les lignes terrestres provinciales sont accessibles avec un 0 devant. Mais si vous composez depuis l'extérieur du Japon, vous n'avez pas besoin de ce 0.

Les numéros mobiles en Chine sont à 10 chiffres et à Hong Kong ils sont 8. Si votre formulaire capture le pays, alors ne demandez même pas le code du pays au début du numéro - affichez-le simplement en texte en lecture seule juste à côté de le nombre dont ils ont besoin pour entrer.

La liste continue.

Validez simplement le nombre de chiffres (assurez-vous qu'aucune lettre n'est acceptée) et faites en sorte qu'il soit facile pour un utilisateur final d'entrer le bon nombre de chiffres. C'est-à-dire qu'ils ne devraient pas avoir à entrer le code du pays et si votre formulaire est super intelligent, ils n'auront peut-être même pas besoin de saisir l'indicatif régional s'il s'agit d'un numéro de téléphone fixe. Ou s'ils commencent à entrer des choses comme un code d'accès, comme 0 devant un numéro japonais, faites-leur simplement savoir qu'ils n'en ont pas besoin.

Tous les autres personnages, à part les chiffres, devraient alors être un point discutable - ils n'ont aucune chance de les entrer.

Todd Main
la source
1
Je n'accepte pas de m'assurer qu'aucune lettre n'est acceptée - allez-y et acceptez-la, puis ignorez-les. Les gens écrivent naturellement des extensions avec un "x" (par exemple: 555-1212 x123). Pourquoi ne pas permettre ça? Les humains peuvent très bien l'analyser, et si l'ordinateur a besoin de l'utiliser, il peut supprimer les non-chiffres trivialement.
Bryan Oakley
0

Google a lib pour cela:

Bibliothèque commune Java, C ++ et JavaScript de Google pour l'analyse, le formatage et la validation des numéros de téléphone internationaux.

https://github.com/googlei18n/libphonenumber

Il fait de son mieux, je pense qu'il doit y avoir des cas qui ne sont pas traités car ce n'est en aucun cas une tâche facile. Laissez les utilisateurs entrer des chiffres et des lettres, supprimez les lettres plus tard avec le code.

Christophe Roussy
la source