首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用preg_match获取电话号码的帮助

使用preg_match获取电话号码的帮助
EN

Stack Overflow用户
提问于 2010-05-14 01:59:36
回答 2查看 2.8K关注 0票数 0

如何编写一条if语句来查找电话号码并将其存储到一个变量中。这是我到目前为止所做的,但它不起作用。

代码语言:javascript
运行
复制
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]);         
}
EN

回答 2

Stack Overflow用户

发布于 2010-05-14 02:10:39

既然您使用的是preg_match(),我就假定您使用的是PHP。对于电话号码,因为它们甚至在N.Am中也是可变的。(11、10或7位数字、可变或无分隔字符等)您可能会发现这样的函数比regex更容易处理:

代码语言:javascript
运行
复制
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;

}

在评论中回复你的问题:

您有一个应该是电话号码的字符串

代码语言:javascript
运行
复制
$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
EN

Stack Overflow用户

发布于 2010-05-14 02:10:35

一开始,您搜索可选的+1和一些贪婪的字符串。改变

代码语言:javascript
运行
复制
(?:[.-]\s*)?

代码语言:javascript
运行
复制
(?:[.-]\d*?)?

应该可以做到这一点,但是在您的正则表达式中可能会有更多的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2829124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档