2016-10-26 1 views
0

J'ai essayé de créer un numéro de contact de base sud-africain regex. Cela ne fonctionne pas. Les règles sont simples.Regex pour un numéro de contact qui commence/ne commence pas par un +

10 chiffres ou 11 chiffres si elle commence par un +

Exemples: +27731231234 +27123456789

Il doit correspondre à des chiffres seulement et longueur. Ma tentative: [+\d]\d{9}\d{0,2}
J'ai testé sur le site https://regex101.com/ et il semblait que cela a fonctionné, mais pas quand je l'ai testé avec /[+\d]\d{9}\d{0,2}/.test('12345gjhf6789123456')) puis j'ai une vraie valeur.

+0

Je suppose que vous voulez dire 10 chiffres si elle commence par a + (puisque a + n'est pas un chiffre) –

+0

Son numéro international sud-africain commence par +27, donc un numéro qui est normalement 073 123 4567 serait +2773 123 4567. Il en est de même avec les numéros de lignes terrestres donc 11 chiffres s'il a un + pour commencer. @ ifran434 j'ai essayé votre regex sur le site de test j'ai lié mais il ne semble pas fonctionner –

Répondre

1

Vous devez spécifier ^ - Début de la chaîne et à la fin $ et

/^(\+\d)?\d{10}$/.test('12345gjhf6789123456')) 
+1

j'ai essayé votre regex sur le site j'ai lié mais il me donne une erreur –

+0

Excuses pour ne pas être plus détaillée. Il dit "" + Le jeton précédent n'est pas quantifiable "" quand je tente de le tester sur le site regex –

+1

Désolé, j'ai oublié un '\'. Fixe –

1

Plutôt que d'utiliser une expression rationnelle qui ne fournira pas de messages d'erreur et est difficile à lire (et maintenir), je suggère une fonction de validation simple qui définit les règles explicitement:

function validate(num) { 
    if (num[0] === '+') { 
    return num.length === 11; 
    } else { 
    return num.length === 10; 
    } 
} 

Cela a quelques avantages, dont:

  • plus vite qu'un regex
  • plus facile à commenter et à étendre plus tard
  • peut être remplacée par une bibliothèque de prédicats complet soufflé ou tout simplement un tableau de règles
+0

Merci j'allais utiliser cette méthode mais malheureusement il doit s'agir d'une regex que j'utilise –