我需要在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;
}
有什么建议吗?
答案 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."]";
}