2012-04-17 14 views
3

나는 전화 번호를 정리하고 유효한 전화 번호로 변환하는 정규 표현식을 가지고 있습니다 : +1 123-1223.정규 표현식 전화 번호 및 전화 내선

정규 표현식 :

Regex.Replace(phone, @"^\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*$", "+1 $1$2$3-$4$5$6-$7$8$9$10"); 

그러나 나는 그렇게 12 수 이상 아무것도 확장으로 나머지 번호를 추가 할 수 그것에에 추가하고 싶습니다. 따라서 숫자가 810.232.122323이면 +1 810-232-1223 x23이됩니다.

정규 표현식을 변경하면 가능합니까? 이것을 할 수있는 좋은 방법이 있습니까? 정규 표현식을 잘 알지 못합니다. 감사!

답변

2

그냥 끝이, 그것은 당신의 11 그룹됩니다 추가 (그리고 실제로 2 자리 또는

(\d{2,}) 

더 코드가 될 것입니다하지 않는 한 그것은 확장을 선택하지 않습니다

Regex.Replace(phone, 
    @"^\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d{2,})$", 
    "+1 $1$2$3-$4$5$6-$7$8$9$10 Ext $11"); 

(\d{2,})? 

아직 전화 번호와 일치하지만 줘야 :이 선택 될 경우

, 다음이 작업을 수행 그래서, 난, 다음과 같이 MatchEvaluator

뭔가를 사용할 필요가이 옵션 또한 내선을 사용하지하려면 위의 의지

같은 확장을 강요하지 (그러나 나는 내 앞에 컴파일러를 가지고 있겠지 조금씩 꺼져 테스트해야 함)

Regex.Replace(phone, 
    @"^\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d{2,})$", 
    "+1 $1$2$3-$4$5$6-$7$8$9$10 Ext $11"); 
    match => 
    { 
     var returnVal = "+1 "; 
     for(int i = 1; i <= 3; i++) 
     { 
      returnVal += match.Groups[i].Value; 
      if(i == 3 || i == 6) 
       returnVal += "-"; 
     } 
     returnVal += match.Groups[11].Success ? " Ext " + match.Groups[11] : "") 
     return returnVal; 
    } 
) 
+0

Sweet! 감사!! –

+0

@ Justin 연장이 선택 사항 인 경우에 추가했습니다. 그냥 유용 할 수도 있다고 생각했습니다 :) –

+0

굉장 감사! 그렇게하면 아주 좋습니다. 옵션으로 Ext를 숨길 수 있습니까? 그렇다면 Ext (비어 있음)처럼 보이지 않습니까? –