使用函数替换preg_replace()

时间:2017-11-17 07:22:12

标签: php

我需要在preg_replace()中使用这样的函数:

$out = preg_replace($regex, "[ ".$this->ToMobileFormatt("$0")." ]", $input);

但它没有成功。

功能和正则表达式。

$regex = '~((?:\+?989|09)|(?:\+?98 9|09)|(?:\+?9|09))(\s|-)*\d{1}(\s|-)*\d{1}(\s|-)*\d{1}(\s|-)*\d{1}(\s|-)*\d{1}(\s|-)*\d{1}(\s|-)*\d{1}(\s|-)*\d{1}(\s|-)*\d{1}~';

function ToMobileFormatt($string)
{


    $string = str_replace(" ","",$string);
    $string = str_replace(" ","",$string);


    if ( preg_match('/^\0\d{10}/', $string) AND count($string) == '11' ) 
    {
        return $string ;
    } 
    elseif( preg_match('/^\98\d{10}/', $string) )
    {
        $string = substr($string,2);
        $string = '0'.$string ;
        return $string ;
    }

    return $string;
}

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

你必须使用preg_replace_callback;) 这样的事情(可能会因你的正则表达式而异):

$out = preg_replace_callback($regex, 'ToMobileFormatt', $input);

function ToMobileFormatt($matches)
{

    $string = str_replace(" ","",$matches[0]);
    $string = str_replace(" ","",$string);


    if ( preg_match('/^\0\d{10}/', $string) AND count($string) == '11' ) 
    {
        return $string ;
    } 
    elseif( preg_match('/^\98\d{10}/', $string) )
    {
        $string = substr($string,2);
        $string = '0'.$string ;
        return $string ;
    }

    return "[ ".$string."]";
}