如何编写一条if语句来查找电话号码并将其存储到一个变量中。这是我到目前为止所做的,但它不起作用。
if (preg_match('/^(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:\(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?$
/', $buffer, $matches))
{
$phonenumber = html_entity_decode($matches[1]);
}
发布于 2010-05-14 02:10:39
既然您使用的是preg_match()
,我就假定您使用的是PHP。对于电话号码,因为它们甚至在N.Am中也是可变的。(11、10或7位数字、可变或无分隔字符等)您可能会发现这样的函数比regex更容易处理:
function validphone(&$value) { //test for N.Am. phone number and reformat in standard format
$valid=false;
$area=NULL;
$working=preg_replace('/\D/', '', $value); //only numbers left, no preceding zeros
switch (strlen($working)) { //cases fall through from 11 to 7
case 11: //e.g. 19024355764
$working=stristr($working,'1'); //trims off 1st 1
case 10: //e.g. 9024355764
$area=substr($working,0,-7);
$working=substr($working,3); //trims off 1st 3
case 7: //e.g. 4355764
$value=implode('-',array($area,substr($working,0,-4),substr($working,-4)));
$valid=true;
break;
default:
$valid=false;
break;
}
return $valid;
}
在评论中回复你的问题:
您有一个应该是电话号码的字符串
$phonish='blahblah#._foo(123)4567890 ixlybob';
if(validphone($phonish)){ //function checks if $phonish is valid & reformats it in a standard way
//do something with $phonish, which now equals '123-456-7890'
} else {
echo 'not a valid phone number';
}
validphone()
函数最适合于预期为电话号码的短字符串。如果您将整个页面转储为一个字符串,然后将其提供给validphone($mywholepage)
,它将一次提取该字符串中的所有数字。因此,具有多个电话号码的文本将返回false,而恰好有11位、10位或7位数字分布的文本将返回true。
发布于 2010-05-14 02:10:35
一开始,您搜索可选的+1
和一些贪婪的字符串。改变
(?:[.-]\s*)?
至
(?:[.-]\d*?)?
应该可以做到这一点,但是在您的正则表达式中可能会有更多的问题。
https://stackoverflow.com/questions/2829124
复制相似问题