Newsgroup: it.comp.www.php
Titolo: validare numero telefonico

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 
ab...@newsland.it


prova cosě:
ereg("[0-9]+[/-+]?", $num_tel)
ereg("[0-9/-+]+", $num_tel)

 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


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

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

 
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

no...@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

 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..



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)