Discussione:
validare numero telefonico
(troppo vecchio per rispondere)
matteo berto
2004-09-13 15:49:39 UTC
Permalink
Salve a tutti,
sto facendo un validatore che controlla tutti i dati postati da un form.
Per validare il numero di telefono avevo intenzione di permettere numeri
ed i caratteri -, / e + (tipo +39333-1141xxx o +39333/1141xxx)
Ho scritto una regex del cavolo:

if (eregi("^[/-+0-9]",$telefono)) { ok } else ..

ho come la sensazione che non sia giusto però, infatti se scrivo tipo
0233blabla me lo passa senza errori
Qualcuno ha qualche consiglio?
Grazie a tutti in anticipo.

Teo
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad ***@newsland.it
Francesco
2004-09-13 15:59:36 UTC
Permalink
Post by matteo berto
Salve a tutti,
sto facendo un validatore che controlla tutti i dati postati da un form.
Per validare il numero di telefono avevo intenzione di permettere numeri
ed i caratteri -, / e + (tipo +39333-1141xxx o +39333/1141xxx)
if (eregi("^[/-+0-9]",$telefono)) { ok } else ..
ho come la sensazione che non sia giusto però, infatti se scrivo tipo
0233blabla me lo passa senza errori
Qualcuno ha qualche consiglio?
Grazie a tutti in anticipo.
Teo
prova così:

ereg("[0-9]+[/-+]?", $num_tel)
ereg("[0-9/-+]+", $num_tel)
Francesco
2004-09-13 19:17:56 UTC
Permalink
Post by Francesco
ereg("[0-9]+[/-+]?", $num_tel)
ereg("[0-9/-+]+", $num_tel)
ho fatto qualcosa di meglio:

ereg("^\+{0,1}[0-9]{0,4}-?\/?[[:space:]]?[0-9]{2,4}-?\/?[[:space:]]?[0-9]{5,
8}$", $telefono)

convalida numeri tipo +39 567-12345678
Francesco
2004-09-14 08:33:25 UTC
Permalink
ereg("^\+{0,1}[0-9]{0,4}-?\/?[[:space:]]?[0-9]{2,4}-?\/?[[:space:]]?[0-9]{5,
Post by Francesco
8}$", $telefono)
convalida numeri tipo +39 567-12345678
Così è più perfezionato, non preciso in assoluto, ma comunque dà discreta
garanzia di validità:

ereg("^(\+{0,1}[0-9]{2,3}|[0-9]{3,5})[-\/ ]?[0-9]{2,4}[-\/ ]?[0-9]{5,8}$",
$telefono)

Umberto Salsi
2004-09-14 01:39:26 UTC
Permalink
Post by Francesco
ereg("[0-9]+[/-+]?", $num_tel)
ereg("[0-9/-+]+", $num_tel)
Manca il '^' iniziale, per qui queste matchano qualunque stringa contenga
almeno una cifra. Per la prima e' evidente, per la seconda l'intervallo
'/-+' e' vuoto, per cui nel set rimane solo 0-9, ma comunque anche questa
regex matcha qualunque stringa contenga almeno una cifra..

Ciao,
___
/_|_\ Umberto Salsi
\/_\/ www.icosaedro.it
Ludovico Grossi
2004-09-13 18:50:48 UTC
Permalink
Post by matteo berto
if (eregi("^[/-+0-9]",$telefono)) { ok } else ..
ho come la sensazione che non sia giusto però, infatti se scrivo tipo
0233blabla me lo passa senza errori
Non sono bravissimo con le regexp, cmq quella che hai fatto cerca la
presenza di una qualsiasi cifra etc all'inizio di una stringa. Dovresti come
minimo indicare anche la fine della stringa ($) ed usare un + dopo le
parentesi quadre per indicare la ripetizione di quella classe di caratteri.

Comunque bisogna farne una più complicata, perchè sennò ti riconosce come
valide cose tipo
"++++"
"1"

Ma per questo mi rimetto a qualcuno più volenteroso di me

Ludovico
Leonardo Serni
2004-09-13 21:24:27 UTC
Permalink
Post by matteo berto
Salve a tutti,
sto facendo un validatore che controlla tutti i dati postati da un form.
Per validare il numero di telefono avevo intenzione di permettere numeri
ed i caratteri -, / e + (tipo +39333-1141xxx o +39333/1141xxx)
Il + e' soltanto all'inizio; poi c'e' o un 3 (per il 39 e per i cellulari)
o uno 0; poi ci possono essere numeri, un segno [-/] opzionale e infine un
altro po' di numeri. Dopo il -/ non ci puo' essere lo zero e c'e' (almeno)
un numero di due cifre.

La butto la':

^([+][0-9]{2})*[/-]*[03][0-9]+([/-][0-9])*[0-9]+$
|-------------| |--------|
internazionale prefisso

In realta' ho commesso i seguenti errori:

- non considero lo spazio, che invece dovrebbe esserci;
- non ho fatto prove e mi sono fidato;
- non ho cercato su Google ("phone validation regexp")
- non ho cercato sul manuale [1]
- a dire il vero (ma l'ho corretto) 335 l'ho visto pure
seguito da zeri

Puo' essere che questi errori non abbiano conseguenze :-)

Leonardo

[1] altrimenti avrei trovato le note di "ereg" dove c'e' proprio quella o
una molto simile
--
Avere studiato senza mettere in pratica e' inutile;
mettere in pratica senza avere studiato e' pericoloso.
- Conphpucio
iuz
2004-09-13 21:26:51 UTC
Permalink
Post by matteo berto
Salve a tutti,
sto facendo un validatore che controlla tutti i dati postati da un form.
Per validare il numero di telefono avevo intenzione di permettere numeri
ed i caratteri -, / e + (tipo +39333-1141xxx o +39333/1141xxx)
if (eregi("^[/-+0-9]",$telefono)) { ok } else ..
ho come la sensazione che non sia giusto però, infatti se scrivo tipo
0233blabla me lo passa senza errori
Qualcuno ha qualche consiglio?
Grazie a tutti in anticipo.
Teo
questo dovrebbe funzionare con tutti i numeri che iniziano con o senza un +
ed uno soltanto seguito da zero o più numeri, uno spazio o nessuno od una
linea o nessuna ma non tutti e due assieme, uno o più numeri ma non zero
if(preg_match("/^\+?[0-9]*[\--\s]?[0-9]+$/", $number))
echo "numero valido <br />";

fammi sapere se ti va bene!
--
www.iuz-lab.info
Umberto Salsi
2004-09-14 01:33:01 UTC
Permalink
***@email.it (matteo berto) wrote:

[ richiede regex per validare numero telefonico ]

Credo che sia errata la tua soluzione perche' il carattere '-' nei set
ha significato riservato (indica un intervallo). Devi metterlo per primo
nel set.

Io partirei da una descrizione BNF del numero di telefono. Poiche' col
telefono e col cellulare soprattutto, ho un rapporto fobico, il meglio
che riesco a pensare e' questo:

cifra = "0".."9";

numero = cifra { cifra };

separatore = " " | "-" | "/";

telefono = [ "+" ] numero { separatore numero };

La corrispondente regex dovrebbe essere:

'^\+?[0-9]+([- /][0-9]+)*$'

Ciao,
___
/_|_\ Umberto Salsi
\/_\/ www.icosaedro.it
Loading...