可能的重复项:
用于电话号码验证的综合正则表达式
请我为邮件和电话号码验证创建了此功能,邮件自己有效,BT电话自己不起作用。
if(trim($_POST['email']) == '') {
$hasError = true;
} else if (!eregi("^[A-Z0-9._%-]+@[A-Z0-9._%-]+'.[A-Z]{2,4}$",
trim($_POST['email']))) {
$hasError = true;
} else {
$email = trim($_POST['email']);
}
if(trim($_POST['phonenumber']) == '') {
$hasError = true;
} else if (!eregi("/^'(?('d{3})')?[- ]?('d{3})[- ]?('d{4})$/$",
trim($_POST['phonenumber']))) {
$hasError = true;
} else {
$phonenumber= trim($_POST['phonenumber']);
}
首先,您应该使用 preg_match
而不是 eregi
。
除此之外,人们以多种方式输入电话号码。处理它们的最简单方法是去除任何不是数字的东西,看看你是否有十位数字:
$number = preg_replace("/'D/","",$_POST['phonenumber']);
if( strlen($number) == 10) { /* ok */ }
else { /* error */ }
我认为更好的方法是从输入中删除所有非数字字符并检查长度是否在一定范围内。特别是如果您将此数据存储在数据库中,这样您最终就不会存储不必要的数据。
如果要允许扩展,则可能需要保留x
字符。这是一个从字符串中删除所有非数字字符的函数(x
除外)。
function removeNonNumeric($string) {
return preg_replace('/[^'dx]/', '', $string)
}
当您需要输出结果时,您可以根据需要设置其格式。