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:
- 1800123456 (Inde)
- 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é?
Réponses:
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.
la source
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:
les deux derniers étant la forme internationale.
En général:
+
symbole uniquement comme caractère de tête, les tirets, les points, les virgules et 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.
la source
+31 (0)30 1234567
où 31 est les Pays-Bas, 030 est l'indicatif régional et 1234567 est l'abonné.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.
la source
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.)
la source
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.
la source
Google a lib pour cela:
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.
la source