Quali caratteri speciali si dovrebbe consentire un numero di telefono?

18

Quindi sto progettando una pagina web che verrà utilizzata per utenti globali, include utenti provenienti da Canada, Stati Uniti, India, Regno Unito ecc. Devo applicare le convalide per questo campo numero di telefono, ma non sono sicuro che il modo migliore per vai su questo.

Alcuni dei formati validi che riesco a pensare sono:

  1. 1800123456 (India)
  2. uso di "-" nei numeri di telefono degli Stati Uniti

Sono un po 'confuso su quali caratteri speciali dovrei consentire a un utente di entrare (ad esempio - / () ). Come hanno risolto gli altri in passato?

    
posta Ranger 09.05.2011 - 07:14
fonte

6 risposte

21

Solo perché puoi limitare qualcosa (questo è quello per cui sei pagato, come programmatore, per scrivere codice), ciò non significa che dovresti effettivamente farlo.

A che serve convalidare un numero? Perché è utile? Fallirà se un utente inserisce "0800DIALTHIS" o "私 は 電話 番号 を 持 て い い い" o "(499) 123-45-67 добавочный 4425"? Sicuramente lo farai (tu dici "globale".), Mentre gli utenti volevano solo trasmettervi un'importante informazione su come contattarli via telefono.

Inoltre, il modo in cui i dati vengono archiviati deve essere regolato dal modo in cui vengono utilizzati. Come userete i numeri? Saranno utilizzati per l'invio automatico di SMS spam o saranno composti manualmente dai gestori? Se è il secondo, quindi permettere qualsiasi carattere aggiuntivo va bene, dal momento che il cervello umano sarà in grado di analizzarli nel modo in cui vedono il più appropriato; e in questo caso non hai davvero bisogno di convalide, il che infastidisce solo gli utenti umani.

    
risposta data 09.05.2011 - 08:46
fonte
7

Sarebbe molto difficile sapere se un numero è valido o meno, poiché diversi paesi hanno formati diversi. In Francia, ad esempio, 06 12 34 56 78 è un numero di telefono valido, mentre 00 12 34 56 78 non lo è, dal momento che il numero può iniziare solo da 01 a 09, 06 e 07 come telefoni cellulari.

Inoltre, i numeri di telefono possono essere scritti in diversi formati, anche nello stesso paese. Ho visto:

  • 06 12 34 56 78
  • 0612345678
  • 06.12.34.56.78
  • 06-12-34-56-78
  • +33612345678
  • +33 (0) 6 12 34 56 78

gli ultimi due sono la forma internazionale.

In generale:

  1. Consenti parentesi, + simbolo solo come un personaggio principale, trattini, punti, virgole e spazi.
  2. Se possibile, ricorda solo il modulo normalizzato (ad esempio +33 (0) 612345678).
  3. Se ciò non è possibile, rimuovi almeno i caratteri separatori (come gli spazi).

Non è raccomandato andare troppo in profondità nella validazione per paesi. Non solo c'è una grande quantità di regole, ma anche le regole cambiano. Ad esempio in Francia, pochi anni fa non c'erano numeri di telefono che iniziassero alle 07 o alle 09. Con il crescente numero di telefoni cellulari apparso 07. Con i servizi VoIP apparso 09.

Puoi anche prendere in considerazione numeri speciali. Ad esempio 3635 è un numero valido in Francia, anche se contiene solo quattro cifre e inizia con un valore diverso da zero.

    
risposta data 09.05.2011 - 07:46
fonte
3

NON limitare i personaggi; prendi tutto ciò che ti dà Ma quando lo componi, prendi solo le cifre. Anche allora potrebbe funzionare male. Ero in Tailandia un anno prima di sapere che 123-4567-9 non significava un'estensione, ma una serie di numeri, da 1234567 a 1234569. Quando ho chiamato "12345679" ha funzionato, perché la compagnia telefonica ha ignorato la cifra in più. Prendi qualcosa, componi solo cifre.

Mi piace il fatto che il mio nuovo telefono consenta spazi nel numero di telefono. Posso inserire "123 456 7890" in questo modo, non tutti uniti insieme.

    
risposta data 09.05.2011 - 11:21
fonte
0

Parentesi, trattino e spazio.

Una volta che l'utente ha inserito il numero di telefono contenente quei simboli, è possibile convalidarli in base alle regole specifiche del paese (che è necessario raccogliere tali regole per ogni paese) e quindi le non-cifre possono effettivamente essere lasciato cadere quando viene elaborato internamente nel software.

Questo perché IDD (International Direct Dialing) rende impossibile richiedere l'uso di "caratteri speciali" per comporre un numero, ad eccezione delle pause nel punzonare le cifre.

(Non sono a conoscenza di questo, per favore correggimi se sbaglio.)

    
risposta data 09.05.2011 - 07:28
fonte
0

L'unica cosa che dovrebbe essere convalidata è il numero di cifre: corrisponde a quello che avresti bisogno di chiamare?

I codici di accesso non possono / devono essere immessi da un utente (ad esempio +1 per gli Stati Uniti). Ti dirò perché - se è un americano a inserirla, e non sono così esperti, probabilmente vorranno inserire 001 invece di 1. La ragione è che 00 è come accedi a un numero internazionale dagli Stati Uniti. Non sanno qual è la differenza tra questo e solo +1. Se chiami i fissi tra i prefissi (e talvolta nello stesso prefisso), inserirai anche un 1 prima di quel numero. Proprio come il Giappone.

Prendi il Giappone. Le linee di terra provinciali sono accessibili con uno 0 sul fronte di loro. Ma se stai componendo da fuori dal Giappone, non ti serve quel 0.

I numeri dei cellulari in Cina sono 10 cifre e ad Hong Kong sono 8. Se il tuo modulo cattura il paese, non chiedere nemmeno il prefisso internazionale all'inizio del numero - basta visualizzarlo automaticamente in testo di sola lettura proprio accanto al numero che devono inserire.

L'elenco continua.

Convalida il numero di cifre (assicurati che nessuna lettera sia accettata) e rendi più facile per un utente finale inserire il giusto numero di cifre. Cioè non dovrebbero essere obbligati a inserire il codice del paese e se il modulo è super intelligente, potrebbe non essere nemmeno necessario inserire il prefisso se è un numero di rete fissa. O se iniziano a inserire cose come un codice di accesso, come 0 davanti a un numero giapponese, fai solo sapere loro che non è necessario.

Ogni altro carattere, oltre alle cifre, dovrebbe essere un punto controverso: non hanno la possibilità di inserirli.

    
risposta data 09.05.2011 - 17:40
fonte
0

Google ha lib per questo:

Google's common Java, C++ and JavaScript library for parsing, formatting, and validating international phone numbers.

link

Fa il massimo sforzo, penso che ci debbano essere casi che non sono gestiti in quanto questo non è affatto un compito facile. Consenti agli utenti di inserire numeri e lettere, rimuovi le lettere più tardi con il codice.

    
risposta data 14.12.2017 - 11:06
fonte

Leggi altre domande sui tag