Newsgroup: it.comp.lang.delphi
Titolo: Verifica numero di cellulare

Ciao a tutti,
   forse e' una banalita' ma non riesco ad uscirne.
Dato che la mia applicazione invia degli sms di avviso, ho la necessita' di 
validare il numero appena digitato.
Il gateway che uso (skebby) richiede il numero di cellulare con il prefisso 
internazionale senza il + o il doppio zero (00) perche' il + lo mette lui 
(skebby) di default.
Cosa facilmente risolvibile ...... se ci sono !!!!; infatti se il + o il 00 
sono presenti li tolgo e tutto funziona.
Il problema e' se non ci sono, a volte (IL PIU' DELLE VOLTE) il numero dove 
inviare l'sms viene digitato senza il +39 o il 39 (se non mettono il + 
figurarsi il 39), quindi il risultato e' un'invio errato.
Come posso fare per validare un numero di cellulare ??
Teniamo presente che i numeri non hanno tutti la stessa lunghezza, quelli 
attuali hanno 10 numeri (senza +39), i piu' vecchi 9 o 8 (ne ho trovato uno 
solo con 8, ma con 9 diversi).
Inoltre ci sono diversi prefissi per telefonia fissa che assomigliano ai 
prefissi del mobile (0331 con 331 0332 con 332  0321 con 321 ecc...) che 
possono essere erroneamente digitati dall'operatore.
 
L'unica alternativa che sto cercando di utilizzare e' una maschera 
preimpostata in un tedit ...
Oppure l'inserimento del solo numero di cellulare tenendo fuori (e 
aggiungendolo dopo) il prefisso internazionale.
 
Suggerimenti??
 
Grazie
 
Daniele
 
 

 
 
 
-- 
Oggi c'e' una grande battaglia di idee,
ma alla fine non ci saranno ne vinti,
ne vincitori, ne idee! S. Benni da Elianto.


Intanto avvisare l'utente che il numero di telefono va inserito in un dato 
formato altrimenti non e' garantito che funzioni... :-)
 
Poi, se non puoi fare affidamento sul numero di cifre perche' i vecchi numeri sono piu' corti... direi di fare una serie di controlli sulla parte
iniziale, correggendo gli errori piu' comuni:
 
se comincia per '+' toglilo
se comincia per '0039' togli '00'
se comincia per 39 va bene
se comincia per 3x con x <> 9 aggiungi '39'
se comincia per 03x con x <> 9 togli '0' e aggiungi '39'
e cosi' via...
 
E poi sperare che cosi' funzioni! :(
 
Giacomo
 
PS. io avevo letto che i numeri di cellulare sono sempre di 7 cifre
(+ 3 di prefisso) sei sicuro che ci siano numeri piu' corti (e che
non siano errori di inserimento) ?

 
 
Confermo che ci sono numeri di cellulare più corti.
 
Ciao.

 non siano errori di inserimento) ?
I piu' vecchi (per indenderci i primi gms) hanno meno cifre.
Ora, non so quanti ancora ce ne sono ..... ma esistono!!
 
Grazie ancora
 
Ciao
 
Daniele 
 

 e cosi' via...
 
[...]
 
Nah, per questa roba si usano le regex. 
Roba simile: 
https://regex101.com/r/yF7bZ0/1
 

Secondo me puoi anche utilizzare le espressioni regolari, però comunque prima devi capire cosa vuoi fare.
 
Quindi l'elenco dei casi lo devi prevedere comunque.
 
Io proverei a fare queste considerazioni sulle regole:
 
I numeri di cellulare italiani iniziano per 3
Quindi, almeno per l'italia hai tre casi:
   ++393...
   00393...
   3...
 
I numeri esteri devono essere sempre preceduti dal prefisso estero, che deve essere per forza del tipo (sono due casi):
   ++NNN...
   00NNN...
 
Qui forse ti conviene cercare un elenco dei prefissi internazionali... (se ne vale la pena)
 
Non vedo altri casi da dover gestire
 
Circa la lunghezza dei numeri, i vecchi GSM (ricordi lontani quando un telefono pesava un kg...) effettivamente avevano una dimensione di 6 cifre (più prefisso).
Ora tutti i numeri hanno una lunghezza di 7 (più prefisso)

 Secondo me puoi anche utilizzare le espressioni regolari, però comunque prima devi capire cosa vuoi fare.
 
La regex a quel link copre i casi che servono.

 Roba simile: 
https://regex101.com/r/yF7bZ0/1
 
 
Grazie per l'aiuto ...
Onestamente non sapevo l'esistenza di questo strumento .... che non sembra 
cosi' facile da usarsi.
Ho visitato il link, ho letto la documentazione di embarcadero (onestamente 
un pochino scarsa), adesso devo fare l'implementazione nella procedura.
 
Seguira' aggiornamento ....
 
Grazie
 
Daniele