2012-10-16 3 views
0

IP가 유효한지 확인하는 정규식을 만들려고합니다. & 사용할 수 있습니다. 멀티 캐스트 주소 (예 : 224.0.0.2) 및 주소 (예 : 0.0.0.0)와 일치하는 것을 제외합니다.정규식 - 멀티 캐스트 주소와 브로드 캐스트 주소를 제외한 유효한 IPv4

0-255하지만이 구현하는 방법을 작동하지 않을 수있는 범위 사이에 존재를 확인 아무것도에서 코드입니다.

하는

내 코드는 지금까지입니다

^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b 

어떤 도움이 좋지 않을까

+0

'.'로 나누면 각 요소를 테스트하는 것이 더 쉬울 것입니다. – Toto

+0

분할하는 것은 무엇을 의미합니까? ? 죄송합니다 내가 상당히 정규식에 새로운이야 – Oli

+0

나는 IP 주소의 4 요소를 분리 의미. – Toto

답변

0

이식성이 가장 뛰어나며 작성하기가 쉽고 유지 관리가 가장 쉽습니다.

\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?) 
\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?) 
\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?) 
\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b 

에만 유효 IP 주소와 일치 플러스 추가 검사

if (int(group[1]) != 224 and (int(group[1]) != 0 or int(group[2]) != 0 or int(group[3]) != 0 or int(group[4]) != 0) ... 

정규식 "가 아니라"작업에서 너무 좋지 않아 각 부분을 분할합니다.

하지만 하나의 정규식으로 사용하려면 모든 올바른 옵션을 열거하십시오. 완벽하지

\b(25[0-5]|2[0134][0-9]|22[0-35-9]|1[0-9][0-9]?|[2-9][0-9]|[2-9]) 
\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?) 
\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?) 
\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b 

... 그것은 단지 당신이 0.0.0.0에 대한 전체 테스트를하려면 첫 번째 8 진수는 다음 위의 15 배를 재현해야합니다 (224) 또는 0 아님을 테스트하기 때문에 적어도 하나의 옥텟이 0이 아닌 모든 조합을 인식한다.

그리고 당연히 테스트를 작성하여 40 억 가지 조합에 대한 정답을 반환하도록을 작성하십시오. 실행하기에는 너무 오래 걸릴 필요가 없습니다. ;-)

관련 문제