sto cercando anche io una espressione regolare che svolga tale funzione.
Quello che ti ha suggerito kb è perfettamente funzionante!
Il problema sorge in caso di numeri internazionali i quali:
- possono iniziare con +0039 (prefisso italia);
- eventualmente, tale prefisso può essere contenuto fra le parentesi
- alle volte gli utenti possono separate prefisso e numero con il simbolo /
- alle volte possono intervallare il numero inserendo degli spazi
- alle volte possono intervallare il numero inserendo dei trattini - o dei punti .
- nei numeri statunitensi ci può essere una "x" a cui seguono altri numeri.
Come puoi capire la cosa è moooooolto più complessa.
per un analisi di tutti questi casi http://stackoverflow.com/questions/1...ber-validation
Il problema l'ho più o meno risolto lato client chiedendo qui sul forum http://forum.html.it/forum/showthrea...readid=1401264
e utilizzo questo codice (scusate OT... è javascript però cmq in tema)
Codice PHP:
<html>
<head>
<script language = "Javascript" type="text/javascript">
// ovviamente i numeri sono consentiti
var digits = "0123456789";
// sono consentiti anche altri simboli e lo spazio
var phoneNumberDelimiters = "()-/. ";
// il carattere + per i numeri internazionali
// (a leading + is OK)
var validWorldPhoneChars = phoneNumberDelimiters + "+";
// lunghezza minima di un numero di telefono è di 9 caratteri
var minDigitsInIPhoneNumber = 9;
function isInteger(s)
{ var i;
for (i = 0; i < s.length; i++)
{
// Check that current character is number.
var c = s.charAt(i);
if (((c < "0") || (c > "9"))) return false;
}
// All characters are numbers.
return true;
}
function stripCharsInBag(s, bag)
{ var i;
var returnString = "";
// Search through string's characters one by one.
// If character is not in bag, append to returnString.
for (i = 0; i < s.length; i++)
{
// Check that current character isn't whitespace.
var c = s.charAt(i);
if (bag.indexOf(c) == -1) returnString += c;
}
return returnString;
}
function trim(s)
{ var i;
var returnString = "";
// Search through string's characters one by one.
// If character is not a whitespace, append to returnString.
for (i = 0; i < s.length; i++)
{
// Check that current character isn't whitespace.
var c = s.charAt(i);
if (c != " ") returnString += c;
}
return returnString;
}
function checkInternationalPhone(strPhone){
var bracket=3
strPhone=trim(strPhone)
if(strPhone.indexOf("+")>1) return false
if(strPhone.indexOf("(")!=-1 && strPhone.indexOf(")")==-1)return false
if(strPhone.indexOf("(")==-1 && strPhone.indexOf(")")!=-1)return false
s=stripCharsInBag(strPhone,validWorldPhoneChars);
return (isInteger(s) && s.length >= minDigitsInIPhoneNumber);
}
function ValidateForm(){
var Phone=document.frmSample.txtPhone
if ((Phone.value==null)||(Phone.value=="")){
alert("Please Enter your Phone Number1")
Phone.focus()
return false
}
if (checkInternationalPhone(Phone.value)==false){
alert("Please Enter a Valid Phone Number2")
Phone.value=""
Phone.focus()
return false
}
return true
}
</script>
</head>
<body>
<form name="frmSample" method="post" action="" onSubmit="return ValidateForm()">
Enter a Phone Number :
<input type="text" name="txtPhone" size="15" maxlength="25">
<input type="submit" name="Submit" value="Submit">
</form>
</body>
</html>
Spero di esserti stato utile...