2012-03-27 3 views
1

해시 기호, 빼기 및 공백을 사용하는 다른 입력 문자열을 기반으로 문자열의 서식을 지정하는 가장 쉬운 방법은 무엇입니까? 내가 가진 무엇해시 기호를 사용하여 숫자의 서식을 지정하는 클래스 또는 함수

(이것은 여러 공간이나가) 다음과 같을 수 전화 번호를 포함하는 하나의 문자열입니다

012-34567890 

나는 수가 수있는 형식을 포함하는 다른 문자열을 로 변환이는 다음과 같습니다

### - ## ## ## 

또는

## - ### ## ## 

또는

###-## ## ## 

해시 위치는 숫자의 형식을 지정해야합니다. 나는 이것을하는 무언가를 생각할 수 없다.

일부 경우 (국제 전화 번호와 같은), (,) 및 + 기호를 사용해야하는 경우도있다. 이 경우 변환 문자열은 다음과 같습니다 (예)

+(##)-(#)##-## ## ## 

누구나 아이디어가 있습니까?

답변

3
$number = "012-34567890"; 
$format1 = "### - ## ## ##"; 
$format2 = "+(##)-(#)##-## ## ##"; 
$format3 = "## - ### ## ####"; 
$format4 = "###-## ## ####"; 

function formatNumber($number, $format) 
{ 
    // get all digits in this telephone number 
    if (!preg_match_all("~\w~", $number, $matches)) 
     return false; 

    // index of next digit to replace # 
    $current = 0; 

    // walk though each character of $format and replace # 
    for ($i = 0; $i < strlen($format); $i++) 
     if ($format[$i] == "#") 
     { 
      if (!isset($matches[0][$current])) 
       // more # than numbers 
       return false; 

      $format[$i] = $matches[0][$current++]; 
     } 

    if (count($matches[0]) != $current) 
     // more numbers than # 
     return false; 

    return $format; 
} 

var_dump(
    formatNumber($number, $format1), 
    formatNumber($number, $format2), 
    formatNumber($number, $format3), 
    formatNumber($number, $format4) 
); 

출력은

당신이 숫자보다 더 #을 가지고있는 경우
boolean false 

string '+(01)-(2)34-56 78 90' (length=20) 

string '01 - 234 56 7890' (length=16) 

string '012-34 56 7890' (length=14) 

, 당신은 단지 대신 기능 return false을 가진 그들을 제거 할 수 있습니다. #보다 많은 자릿수가 있으면 형식에 추가 할 수도 있습니다.

관련 문제