Quali caratteri speciali si dovrebbero consentire per un numero di telefono?


20

Quindi sto progettando una pagina Web che verrà utilizzata per gli utenti globali, includendo utenti provenienti da Canada, Stati Uniti, India, Regno Unito, ecc. Devo applicare convalide per questo campo del numero di telefono, ma non sono sicuro del modo migliore per procedere .

Alcuni dei formati validi che mi vengono in mente sono:

  1. 1800123456 (India)
  2. uso di "-" nei numeri di telefono statunitensi

Sono un po 'confuso su quali caratteri speciali dovrei consentire a un utente di entrare (es. - / ()). In che modo altri hanno risolto questo problema in passato?


1
Che dire dei numeri di telefono espressi con lettere, ad esempio 0800DIALTHIS?
mouviciel,

3
Cosa stai cercando di prevenire? L'utente sta mentendo? L'utente non vuole che tu sappia il suo numero? L'utente è troppo pigro per inserire qualcosa? L'utente sta facendo un refuso?
Benjol,

@ mouviviel: sì, anche io devo pensare a che sto prendendo uno scenario di valdazione alla volta, quindi ci penserò.
Ranger,

@Benjol: Questa applicazione è commerciale, quindi non possiamo rischiare per i nostri clienti, so che un utente inserirà un numero corretto, ma cosa succede se non lo fa. Valdation è piuttosto importante in quanto salva l'applicazione non solo errori di battitura. Non voglio che il mio DB si riempia di spazzatura inutile.
Ranger,

5
bene cosa stai facendo per convalidare i loro indirizzi email? Noterai che quasi tutti i siti Web eseguono la convalida della "vita reale" (ovvero inviandoti una mail). Penso che se il numero di telefono è così importante, dovresti fare qualcosa di equivalente.
Benjol,

Risposte:


21

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

Qual è il punto di convalida di un numero? Perché è utile Fallirà se un utente inserisce "0800DIALTHIS" o "私 は 電話 番号 を 持 っ て い な い" o "(499) 123-45-67 добавочный 4425"? Sicuramente lo farà (dici "globale". Non è vero?), Mentre gli utenti volevano solo fornirti un'importante informazione su come contattarli via telefono.

Inoltre, il modo in cui i dati vengono archiviati dovrebbe essere regolato dal modo in cui vengono utilizzati. Come userete i numeri? Saranno utilizzati per inviare automaticamente spam SMS o saranno composti manualmente dai gestori? Se è quest'ultimo, quindi consentire qualsiasi personaggio aggiuntivo va bene, poiché 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 alcuna validazione, il che disturberà solo gli utenti umani.


7
+1 per "gli utenti volevano solo fornirti un'informazione importante". Ho visto troppo spesso convalide non necessarie che infastidiscono semplicemente l'utente senza alcun reale requisito tecnico (o organizzativo).
perdian,

6
+1: la convalida del numero di telefono (in particolare definito in senso lato) è spesso inutile, non a prova di futuro (KL5-6743 era un numero di telefono valido, ad esempio) e infastidisce solo gli utenti che hanno casi speciali. Trasforma i tuoi numeri di telefono in un grande campo di testo e lascia che i dialer automatici (se presenti in questo scenario) analizzino ciò che possono. Le eccezioni possono essere sollevate per gli umani che possono gestire la situazione in modo appropriato.
EZ Hart

8
+1 e, soprattutto, solo perché un numero di telefono è valido, non significa che esista, e anche se esiste, non significa che appartiene alla persona in questione ...
Benjol

Oh sì, scoprirò i paesi in cui vivono i nostri utenti principali e poi scriverò un codice di convalida. Grazie a tutti, apprezzo i vostri sforzi.
Ranger,

4
@Ranger Questo è esattamente l'opposto di quello a cui stava arrivando la risposta.
Sebastian Redl,

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 è, poiché 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 protagonista, trattini, punti, virgole e spazi.
  2. Se possibile, ricorda solo la forma normalizzata (ovvero +33 (0) 612345678).
  3. Se ciò non è possibile, rimuovere almeno i caratteri di separazione (come gli spazi).

Si sconsiglia di approfondire la convalida per paesi. Non solo esiste una grande quantità di regole, ma cambiano anche le regole. Ad esempio, in Francia, alcuni anni fa non c'erano numeri telefonici che iniziassero da 07 o 09. Con il numero crescente 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.


1
Aiuterebbe a mostrare l'uso delle parentesi nei tuoi esempi. I numeri internazionali spesso li usano per racchiudere lo zero iniziale del prefisso per indicare che non lo si compone quando si chiama dall'estero. Ad esempio, +31 (0)30 1234567dove 31 è Paesi Bassi, 030 è il prefisso e 1234567 è l'abbonato.
Marjan Venema,

2
Non dimenticare un campo opzionale per il codice di estensione (che potrebbe richiedere la chiave sterlina o asterisco).
rwong

@MarjanVenema, non faccio molte chiamate internazionali, ma è standard aggiungere lo zero e aggiungere parentesi (0) per dirti di NON comporlo? Non sarebbe più semplice tralasciare del tutto lo 0?
CaffGeek,

@Chad: No. Dice agli utenti internazionali che devono lasciarlo fuori e dice agli utenti nazionali che devono usarlo. Non tutti i paesi hanno prefissi che iniziano con uno zero. Farlo in questo modo assicura che quando qualcuno vede il numero sappia cosa fare quando è dentro e quando è fuori dal Paese. Dopo tutto, non tutti coloro che chiamano a livello nazionale devono essere residenti ...
Marjan Venema,

@MarjanVenema, oh, vedo, non avevo capito che gli utenti nazionali ne avevano bisogno, hanno imparato qualcosa di nuovo oggi.
CaffGeek,

3

NON limitare i caratteri; 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 che venissi a sapere che 123-4567-9 non significava un interno, ma un intervallo di numeri, da 1234567 a 1234569. Quando composi il numero "12345679" funzionava, perché la compagnia telefonica ignorò la cifra aggiuntiva. Prendi qualsiasi cosa, componi solo cifre.

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


2
+100. Non c'è niente di peggio di un computer che dice "per favore rimuovi il - dal numero", come se il computer non avesse idea di come farlo da solo. Lo stesso vale per i numeri di carta di credito, FWIW.
Bryan Oakley,

0

Staffe, 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 ciascun paese), quindi è possibile eliminare effettivamente le non cifre quando viene elaborato internamente nel tuo software.

Questo perché IDD (composizione diretta internazionale) rende impossibile richiedere che qualsiasi "carattere speciale" sia effettivamente utilizzato per comporre un numero, ad eccezione delle pause nella digitazione delle cifre.

(Non ne sono affatto a conoscenza; per favore correggimi se sbaglio.)


3
Stai dimenticando il segno \ + per l'accesso internazionale
Marjan Venema,

2
consenti anche la lettera x - almeno negli Stati Uniti è comune prefissare un'estensione con una x (ad esempio: 555-1212 x123).
Bryan Oakley,

0

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

I codici di accesso non possono / non devono poter essere immessi da un utente (ovvero +1 per gli Stati Uniti). Ti dirò perché - se è un americano che entra, e non sono così esperti, probabilmente vorranno inserire 001 invece di 1. Il motivo è che 00 è il modo in cui accedi a un numero internazionale all'interno degli Stati Uniti. Non sanno quale sia la differenza tra quello e solo +1. Se stai chiamando i numeri di rete fissa tra prefissi (e talvolta con lo stesso prefisso), inserisci anche un 1 prima di quel numero. Proprio come il Giappone.

Prendi il Giappone Le linee terrestri provinciali sono accessibili con uno 0 sul davanti di esse. Ma se stai componendo al di fuori del Giappone, non hai bisogno di quello 0.

I numeri di cellulare in Cina sono di 10 cifre e a Hong Kong di 8. Se il modulo acquisisce il paese, non chiedere nemmeno il prefisso del paese all'inizio del numero, basta mostrarlo automaticamente nel testo di sola lettura accanto a il numero che devono inserire.

L'elenco continua.

Convalida semplicemente il numero di cifre (assicurati che non vengano accettate lettere) e consenti all'utente finale di inserire il numero corretto di cifre. Vale a dire che non dovrebbero inserire il prefisso del paese e se il modulo è super intelligente, potrebbe non essere nemmeno necessario inserire il prefisso se si tratta di un numero di rete fissa. O se iniziano a inserire elementi come un codice di accesso, come 0 davanti a un numero giapponese, basta far loro sapere che non è necessario.

Ogni altro personaggio, oltre alle cifre, dovrebbe quindi essere un punto controverso - non hanno la possibilità di inserirli.


1
Non sono d'accordo per assicurarmi che non vengano accettate lettere - vai avanti e accetta il, quindi semplicemente ignorale. Le persone scrivono naturalmente estensioni con una "x" (ad esempio: 555-1212 x123). Perché non permetterlo? Gli umani possono analizzarlo bene, e se il computer deve usarlo, può eliminare banalmente le non cifre.
Bryan Oakley,

0

Google ha lib per questo:

La libreria Java, C ++ e JavaScript comune di Google per l'analisi, la formattazione e la convalida dei numeri di telefono internazionali.

https://github.com/googlei18n/libphonenumber

Fa del suo meglio, penso che ci debbano essere casi che non vengono gestiti in quanto questo non è affatto un compito facile. Consenti agli utenti di inserire numeri e lettere, rimuovi le lettere in seguito con il codice.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.