“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가 오버플로 될 수 있습니다.