我将如何编写一个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]);
}
答案 0 :(得分:1)
由于你正在使用preg_match()
,我假设你正在使用PHP。对于电话号码,因为它们的可变性甚至在N.Am. (11,10或7位数,不同或没有分隔字符等)你可能会发现这样的函数比正则表达式更容易处理:
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;
}
在评论中ETA你的问题:
您的字符串应为电话号码
$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。
答案 1 :(得分:0)
一开始,您搜索可选的+1
和一些贪婪的字符串。改变
(?:[.-]\s*)?
到
(?:[.-]\d*?)?
应该可以解决问题,但也许你的正则表达式中存在更多问题。