2011-08-31 3 views
0

.NET에서 NANP 형식 (특수 문자는 허용되지 않음)으로 10 자리 (미국) 전화 번호를 확인하고 마지막 7 자리를 확인해야합니다 전화 번호는 반복되지 않습니다. 지금까지, 나는 NANP 형식마지막 7 자리가 아닌 반복되는 NANP 전화 번호의 Regex

^(?:[2-9][0-8][0-9])([2-9][0-9]{2}[0-9]{4})$ 

가 어떻게 또한 지난 7 개 자리를 비 반복을 설명하기 위해이 정규식을 수정 않습니다 확인하기 위해 다음과 같은 정규 표현식을 작성했습니다? 두 개의 regexes를 사용하는 것은 기존 코드의 제약 때문에 옵션이 아님을주의하십시오.

편집 : 모든 7 자리 숫자가 연속적인지 확인해야합니다. 예 : 2062222222는 유효하지 않은 것으로 간주되어야하며 2062221234 또는 2062117777은 유효해야합니다.

감사

답변

1

연속 숫자가이고, 7 자리 숫자가 모두 고유해야합니까?

2342497553 // consecutive duplicates 
2345816245 // non-consecutive duplicates 
2345816249 // no duplicates 

이 정규식 필터링 연속 중복 :

^(?:[2-9][0-8][0-9])(?!.*(\d)\1)([2-9][0-9]{2}[0-9]{4})$ 

...이 하나가 어떤 중복 된 숫자 허용하지 않습니다 동안 : 처음 세 자리 숫자 후

^(?:[2-9][0-8][0-9])(?!.*(\d).*\1)([2-9][0-9]{2}[0-9]{4})$ 

을 예를 들어 lookahead는 즉시 반복되는 문자를 찾으려고 시도합니다 ((?!.*(.)\1)). 또는 선택적으로 개입하는 c haracters ((?!.*(.).*\1)). 그리고 음수 lookahead이므로 성공하면 전체 일치가 실패합니다.


편집 : 그것은 밝혀 문제가 생각보다 간단하다. 지난 7 자리 숫자가 동일한 2345555555, 같은 번호를 필터링하려면 다음을 사용 :

^(?:[2-9][0-8][0-9])(?!(\d)\1+$)([2-9][0-9]{2}[0-9]{4})$ 

그것은 그없이이 2345555556 같은 유효한 번호와 일치하지 않기 때문에, 최종 앵커 ($)를 포함하는 것이 중요합니다. 또는 캡처 된 숫자 중 정확히 6 개를 찾으라고 말할 수도 있습니다 ((?!(\d)\1{6})).

+0

나는 7 자리 숫자 모두에서 연속 된 중복을 검사하고 있습니다. 예 : 2062222222는 유효하지 않은 것으로 간주되어야하며 2062221234 또는 206 2117777은 유효해야합니다. 미안 해요, 제 질문은 분명하지 않았습니다. 질문을 편집하고이 정보를 추가하겠습니다. – Ganga

+0

감사합니다. Alan! 편집에있는 정규 표현식은 내가 가진 특정 문제를 해결합니다. – Ganga

0

나는 이것의 반복되지 않는 부분이 지난 밤에 와서 일반적인 합의가 정규 표현식은 당신이에 넣어해야 할 것, 직접 비 반복을 처리 할 수 ​​있었다 확신 관리 할 수 ​​없을만큼 많은 수의 대체 사례. 나는 그것이 실제로 증명 된 것을 보지 못했다고 생각하지만, 사실이라고 확신한다. 정규 표현식에 메모리가 없다는 사실에 귀결됩니다. 정규식을 사용하여 형식의 유효성을 검사하고 반복을 확인하기 위해 별도의 알고리즘을 통해 실행하는 것이 좋습니다.

관련 문제