2017-11-17 2 views
0

나는이 같은 preg_replace()의 기능을 사용해야합니다.사용 기능 preg_replace이다에 대한 대체()

fuction 및 regex.

$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

, 모두의 값이 무엇입니까 변수들? 전화 번호 – mike

+0

마이크가 말했듯이, 정규식과 입력의 실제 가치는 무엇입니까? 그것은 무엇을합니까? 지금은 대답하기가 어렵습니다. – creavaehahea

+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."]"; 
} 
당신이 적절한 대답을 얻기 위해 더 많은 정보를 추가해야합니다
+0

감사합니다. preg_replace_callback에서'$ this-> ToMobileFormatt ($ 0)'을 어떻게 사용해야합니까? – creavaehahea

+0

'$ out = preg_replace_callback ($ regex, [$ this, 'ToMobileFormatt'], $ input);'. 그렇지 않으면 ToMobileFormatt을 정적 메서드로 설정하고 'YourClass :: ToMobileFormatt'로 호출 할 수 있습니다. 내 의견으로는 좀 더 읽을 수 있습니다 :) –