RegEx per numero di telefono internazionale valido

Uso Clickatell per inviare SMS ai telefoni cellulari dei clienti.

Esiste un’espressione regolare standardizzata per tutti i numeri di telefono cellulare validi, ad es. +27 123 4567? Farei il mio, ma sono preoccupato per la mancanza di un formato di numero di telefono oscuro e valido.

Dopo aver rimosso tutti i caratteri tranne “+” e le cifre dal tuo input, questo dovrebbe farlo:

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

Se si desidera essere più precisi con i codici paese, consultare questa domanda su Elenco dei codici paese dei numeri di telefono

Tuttavia, proverei a non essere troppo severo con la mia convalida. Gli utenti si sentono molto frustrati se gli viene detto che i loro numeri validi non sono accettabili.

Anche se si scrive un’espressione regolare che corrisponda esattamente al sottoinsieme “numeri telefonici validi” di stringhe, non c’è modo di garantire (tramite un’espressione regolare) che siano numeri di cellulare validi. In diversi paesi, i numeri di cellulare sono indistinguibili dai numeri di telefono di rete fissa senza almeno una ricerca di numero di piani, e in alcuni casi, anche questo non aiuta. Ad esempio, in Svezia, molte persone hanno “trasferito” il loro normale numero di telefono fisso sul proprio telefono cellulare. È sempre lo stesso numero di prima, ma ora va a un telefono cellulare anziché a una rete fissa.

Dal momento che i numeri di telefono validi consistono solo di cifre, dubito che rotolare il proprio rischia di perdere un caso oscuro del numero di telefono , almeno. Se si desidera avere una maggiore certezza, scrivere un generatore che raccolga un elenco di tutti i codici di paese validi e richieda uno di essi all’inizio del numero di telefono che corrisponda all’espressione regolare generata.

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

L’espressione regolare ^\+[1-9]{1}[0-9]{7,11}$ non riesce per “+290 8000” e numeri validi simili che sono più brevi di 8 cifre.

I numeri più lunghi possono essere qualcosa come il prefisso internazionale a 3 cifre, il prefisso a 3 cifre, il numero di abbonato a 8 cifre e 14 cifre.

Anche se si tratta di numeri internazionali, vorrei che il codice fosse simile a:

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

Come puoi avere numeri internazionali che iniziano anche con ’00’.

Perché preferisco 15 cifre: http://en.wikipedia.org/wiki/E.164

Pubblicazione di una nota qui per gli utenti che guardano a questo nel futuro. Il libphonenumber di Google è ciò che probabilmente vorrai usare. Esistono wrapper per PHP, node.js, Java, ecc. Per utilizzare i dati raccolti da Google e ridurre i requisiti per il mantenimento di array di grandi dimensioni di modelli regex da applicare.

// Regex: verifica i numeri di cellulare validi di Singapore

 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; } }