Diciamo che abbiamo un sistema di registrazione che finalizza la creazione di un account inviando SMS all'utente i dettagli del nuovo account.
Questo sistema potrebbe essere utilizzato da persone di tutto il mondo, quindi diciamo che stiamo usando un'API online che può inviare SMS a livello internazionale indipendentemente dal corriere del destinatario. Poiché vogliamo massimizzare l'uso di questo sistema, dovremmo ovviamente considerare i diversi modi in cui i diversi paesi rappresentano i numeri di telefono: (esempio sollevato da collegamento )
754-3010, Local number
(541) 754-3010, Domestic number
+1-541-754-3010, International
1-541-754-3010, Dialed in the US
001-541-754-3010, Dialed from Germany
191 541 754 3010, Dialed from France
Qual è il modo migliore per rappresentare il numero di telefono immesso al momento dell'invio a un'API? Trivially (basato sulla mia propria rappresentanza locale in Australia) potrei pensare:
{ "nationCode" : "+61", "number" : "0400100200" }
Tuttavia, come mostrano gli esempi precedenti, diverse rappresentazioni regionali potrebbero non garantire che un pubblico internazionale digiti qualcosa sullo schermo come farò io.
Avendo recentemente imbattuto in libphonenumber , sembra che un'idea migliore potrebbe essere accettare una stringa grezza come rappresentata dall'utente, ma anche catturare il paese dal quale proviene il numero dell'utente. Con queste due informazioni, la libreria sembra essere in grado di fare il trucco:
PhoneNumber swissNumberProto = phoneUtil.parse(swissNumberStr, "CH");
Qualcuno ha suggerimenti migliori su come risolvere questo problema? Mi rendo conto che sì, è possibile massimizzare l'usabilità per un utente e lasciare che digitino ciò che vogliono - ma il compromesso è il lavoro manuale che sarebbe necessario per correggere i numeri cattivi; e se il sistema dipende da numeri validi per inviare SMS, l'intervento manuale è chiaramente un prezzo alto da pagare.