문제

문자열이 IP 주소인지 어떻게 확인할 수 있나요?어느 하나 IPv4 또는 IPv6?

최소 문자 수와 최대 문자 수는 얼마입니까?

나는 이것이 정규식 답변.

도움이 되었습니까?

해결책

하지만 문제는 가정만큼 간단하지 않습니다. a.b.c.d ... 당신이 생각하는 것보다 훨씬 더 많은 형태가 있습니다.

하지만 확실히 이것이 Google for it 질문인가요?꽤 많이 모든 어디서나 찾을 수 있는 정규식 입문서는 IP를 예로 사용합니다! IPv4 + 정규식 183,000 히트 기록!

다른 팁

이전에 이 작업을 수행한 적이 있지만 다음 위치의 Raymond Chen의 게시물이 마음에 듭니다.

http://blogs.msdn.com/oldnewthing/archive/2006/05/22/603788.aspx

그는 기본적으로 자신이 잘하는 것에 대해 정규식 사용을 옹호합니다.토큰을 파싱합니다.그런 다음 결과를 평가하십시오.그의 예:

function isDottedIPv4(s)
{
 var match = s.match(/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/);
 return match != null &&
        match[1] <= 255 && match[2] <= 255 &&
        match[3] <= 255 && match[4] <= 255;
}

그것을 보고 그것이 무엇을 해야 하는지 파악하는 것이 훨씬 쉽습니다.

.NET에는 편리한 메소드가 있는 IPAddress 유형이 있습니다. TryParse.

예:

if(System.Net.IPAddress.TryParse(PossibleIPAddress, validatedIPAddress)){
    //validatedIPAddress is good
}

// or more simply:
bool IsValidIPAddress(string possibleIP){
    return System.Net.IPAddress.TryParse(PossibleIPAddress, null)
}

IPv4의 경우 이 정규식을 사용할 수 있습니다.

\b(?:(?: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-255의 숫자로 제한하여 작동합니다.

@슬라이스되지 않은:사실, 이 문제는 약간 이상할 수 있습니다.

가능한 IP 주소를 정말로 처리해야 한다면 좀 더 정교한 것을 구성해야 합니다.

그러나 사용자가 올바른 형식의 데이터를 입력하고 있는지 확인하기 위해 기본 유효성 검사를 수행하려는 경우 위의 정규식을 사용하여 a.b.c.d 모델로 제한하는 것이 공정하다고 생각합니다.

@unsliced는 정확하지만 물론 구현에 따라 다릅니다. 사이트를 방문하는 사용자의 IP를 구문 분석하는 경우 x.x.x.x 형식이어야 하므로 정규식을 사용해도 됩니다.

IPv6의 경우 이것을 사용할 수 있습니다

[A-F0-9]{0,4}:[A-F0-9]{0,4}:[A-F0-9]{0,4}:[A-F0-9]{0,4}:[A-F0-9]{0,4}:[A-F0-9]{0,4}:[A-F0-9]{0,4}:[A-F0-9]{0,4}

그러나 IPv6의 경우 훨씬 더 복잡하기 때문에 모든 것을 포착하지는 못합니다. Wikipedia에 따르면 다음 예제는 모두 기술적으로 정확하지만 위의 정규식은 *가 있는 예제만 포착합니다.

2001:0db8:0000:0000:0000:0000:1428:57ab*
2001:0db8:0000:0000:0000::1428:57ab*
2001:0db8:0:0:0:0:1428:57ab*
2001:0db8:0:0::1428:57ab
2001:0db8::1428:57ab
2001:db8::1428:57ab

그 Regex의 절반은 마지막 세그먼트에 끝에 기간이 없다는 사실을 처리하기 때문에 A ''를 처리하면 반으로자를 수 있습니다. ' 가능한 IP 주소의 끝까지.

이 같은:

bool IsValidIPAddress(string possibleIP){
  CrazyRegex = \b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){4}\b
  return Regex.Match(possibleIP+'.', CrazyRegex)
}

IPv4는 다음과 같습니다. /\d\d?\d?.\d\d?\d?.\d\d?\d?.\d\d?\d?/

IPv6 규칙에 대해 잘 모르겠습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top