[C#] C #에서 문자열을 전화 번호로 형식화하는 방법

“1112224444”라는 문자열이 있는데 전화 번호입니다. 파일에 저장하기 전에 111-222-4444로 형식을 지정하려고합니다. 데이터 레코드에 있으며 새 것을 할당하지 않고도이 작업을 수행 할 수 있습니다. 변하기 쉬운.

나는 생각하고 있었다 :

String.Format("{0:###-###-####}", i["MyPhone"].ToString() );

그러나 그것은 트릭을하지 않는 것 같습니다.

** 업데이트 **

확인. 이 솔루션과 함께 갔다

Convert.ToInt64(i["Customer Phone"]).ToString("###-###-#### ####")

이제 확장명이 4 자리 미만이면 엉망이됩니다. 오른쪽에서 숫자를 채 웁니다. 그래서

1112224444 333  becomes

11-221-244 3334

어떤 아이디어?



답변

이 답변은 숫자 데이터 유형 (int, long)에서 작동합니다. 문자열로 시작하는 경우 먼저 숫자로 변환해야합니다. 또한 초기 문자열 길이가 10 자 이상인지 확인해야합니다.

예제로 가득 찬 좋은 페이지 에서 :

String.Format("{0:(###) ###-####}", 8005551212);

    This will output "(800) 555-1212".

정규식이 더 잘 작동 할 수 있지만 이전 프로그래밍 인용문을 명심하십시오.

어떤 사람들은 문제에 직면했을 때“정규 표현을 사용할 것입니다.”라고 생각합니다. 이제 두 가지 문제가 있습니다.
comp.lang.emacs의 –Jamie Zawinski


답변

정규식을 선호합니다.

Regex.Replace("1112224444", @"(\d{3})(\d{3})(\d{4})", "$1-$2-$3");


답변

하위 문자열로 분리해야합니다. 추가 변수없이 그렇게 할 는 있지만 특히 좋지는 않습니다. 하나의 가능한 해결책은 다음과 같습니다.

string phone = i["MyPhone"].ToString();
string area = phone.Substring(0, 3);
string major = phone.Substring(3, 3);
string minor = phone.Substring(6);
string formatted = string.Format("{0}-{1}-{2}", area, major, minor);


답변

나는 이것을 미국 번호에 대한 깨끗한 해결책으로 제안합니다.

public static string PhoneNumber(string value)
{
    if (string.IsNullOrEmpty(value)) return string.Empty;
    value = new System.Text.RegularExpressions.Regex(@"\D")
        .Replace(value, string.Empty);
    value = value.TrimStart('1');
    if (value.Length == 7)
        return Convert.ToInt64(value).ToString("###-####");
    if (value.Length == 10)
        return Convert.ToInt64(value).ToString("###-###-####");
    if (value.Length > 10)
        return Convert.ToInt64(value)
            .ToString("###-###-#### " + new String('#', (value.Length - 10)));
    return value;
}


답변

내가 아는 한 string.Format 으로이 작업을 수행 할 수는 없습니다.이를 직접 처리해야합니다. 숫자가 아닌 문자를 모두 제거한 다음 다음과 같이 할 수 있습니다.

string.Format("({0}) {1}-{2}",
     phoneNumber.Substring(0, 3),
     phoneNumber.Substring(3, 3),
     phoneNumber.Substring(6));

데이터가 올바르게 입력되었다고 가정하고 정규식을 사용하여 유효성을 검사 할 수 있습니다.


답변

이것은 작동해야합니다 :

String.Format("{0:(###)###-####}", Convert.ToInt64("1112224444"));

또는 귀하의 경우 :

String.Format("{0:###-###-####}", Convert.ToInt64("1112224444"));


답변

당신이 얻을 수있는 경우 i["MyPhone"]A와 long, 당신은 사용할 수있는 long.ToString()포맷하는 방법 :

Convert.ToLong(i["MyPhone"]).ToString("###-###-####");

숫자 형식 문자열 에 대한 MSDN 페이지를 참조하십시오 .

int보다는 long을 사용하도록주의하십시오 : int가 오버플로 될 수 있습니다.