web-dev-qa-db-fra.com

RegEx pour un numéro de téléphone mobile international valide

J'utilise Clickatell pour envoyer des SMS aux téléphones mobiles des clients.

Existe-t-il une expression régulière standardisée pour tous les numéros de téléphone mobiles valides, par exemple +27 123 4567? Je me lancerais moi-même, mais je crains de ne pas avoir un format de numéro de téléphone obscur et valide.

21
Petrus Theron

Après avoir enlevé tous les caractères sauf '+' et les chiffres de votre saisie, vous devriez le faire:

^\+[1-9]{1}[0-9]{3,14}$

Si vous voulez être plus précis avec les codes de pays, consultez cette question à Liste des codes de pays des numéros de téléphone

Cependant, j'essaierais de ne pas être trop strict avec ma validation. Les utilisateurs sont très frustrés s’ils apprennent que leurs numéros valides ne sont pas acceptables. 

23

Même si vous écrivez une expression régulière qui correspond exactement au sous-ensemble de "numéros de téléphone valides", il n'y a aucun moyen de garantir (au moyen d'une expression régulière) qu'il s'agit de numéros de téléphone mobiles valides. Dans plusieurs pays, il est impossible de distinguer les numéros de téléphone mobiles des numéros de téléphone fixes sans au moins une recherche de plan de numéros, et dans certains cas, même cela ne changera rien. Par exemple, en Suède, de nombreuses personnes ont "transféré" leur numéro de téléphone habituel, semblable à un téléphone fixe, sur leur téléphone portable. C'est toujours le même numéro qu'avant, mais maintenant, ça passe sur un téléphone portable plutôt que sur un téléphone fixe.

Étant donné que les numéros de téléphone valables sont composés uniquement de chiffres, je doute que rouler les vôtres risquerait de manquer au moins un cas obscur de numéro de téléphone. Si vous voulez plus de certitude, écrivez un générateur qui prend une liste de tous les codes de pays valides et exige que l'un d'eux au début du numéro de téléphone soit associé à l'expression régulière générée.

5
a CVn
^\+[1-9]{1}[0-9]{7,11}$ 

L'expression régulière ^\+[1-9]{1}[0-9]{7,11}$ échoue pour "+290 8000" et des nombres valides similaires inférieurs à 8 chiffres.

Les numéros les plus longs pourraient être quelque chose comme un code de pays à 3 chiffres, un indicatif régional à 3 chiffres, un numéro d’abonné à 8 chiffres, soit 14 chiffres.

2
dave singer

Publier une note ici pour les utilisateurs qui s’intéressent davantage à cette question. libphonenumber de Google est ce que vous voudriez probablement utiliser. Il existe des wrappers pour PHP, node.js, Java, etc. qui permettent d’utiliser les données collectées par Google, ce qui réduit les exigences en matière de maintenance de grands tableaux de modèles de regex à appliquer.

2
Jacques Marneweck

Même s'il s'agit de numéros internationaux, je voudrais que le code ressemble à ceci: 

/^(\+|\d)[0-9]{7,16}$/;

Comme vous pouvez avoir des numéros internationaux commençant par '00'.

Pourquoi je préfère les 15 chiffres: http://fr.wikipedia.org/wiki/E.164

2
Nasaralla

// Regex - Vérifier les numéros de téléphone valides de Singapour

public static boolean isSingaporeMobileNo(String str) {
    Pattern mobNO = Pattern.compile("^(((0|((\\+)?65([- ])?))|((\\((\\+)?65\\)([- ])?)))?[8-9]\\d{7})?$");
    Matcher matcher = mobNO.matcher(str);
    if (matcher.find()) {
        return true;
    } else {
        return false;
    }
}
0
John