프로그래밍/웹 관련

[javascript] 올바른 IP 주소인지 확인하는 방법

채윤아빠 2024. 6. 25. 22:46
728x90
반응형

올바른 IP 주소인지 유효성을 검사하는 간단한 javascript 함수를 소개해 드리겠습니다.

IPv4 주소 문자열 형식은 0 ~ 255 사이의 숫자 4개가 점으로 구분되어 있어야만 합니다.

다음 isValidIP() 함수는 IP 주소 문자열 "nnn.nnn.nnn.nnn"이 올바른 범위 내 주소로 구성되어 있는지 확인합니다.

function isValidIP(ipAddress) {
    // 문자열이 비어있거나 undefined인 경우
    if (!ipAddress) {
        return false;
    }

    // 점으로 구분된 부분들로 분리
    const parts = ipAddress.split('.');

    // IPv4는 반드시 4개의 부분으로 구성되어야 함
    if (parts.length !== 4) {
        return false;
    }

    // 각 부분을 검사
    return parts.every(part => {
        // 빈 문자열 체크
        if (part.length === 0 || part.length > 3) {
            return false;
        }

        // 숫자가 아닌 문자가 포함되어 있는지 체크
        if (!/^\d+$/.test(part)) {
            return false;
        }

        // 앞에 불필요한 0이 있는지 체크 (01, 001 등)
        if (part.length > 1 && part[0] === '0') {
            return false;
        }

        // 0 ~ 255 범위 체크
        const num = parseInt(part, 10);
        return num >= 0 && num <= 255;
    });
}


isValidIP() 함수는 다음과 같은 조건들을 검사합니다.

  • IP 주소가 "."을 기준으로 4개의 숫자로 구성되어 있는가?
  • 각 주소 부분이 0에서 255 사이의 숫자인가?
  • 불필요한 선행 0이 없는가? (예: 01.1.1.1은 유효하지 않음)
  • 빈 문자열이나 잘못된 형식이 아닌가?

isValidIP() 함수를 이용하여 IP 주소 문자열을 아래와 같이 확인해 보았습니다.

// 사용 예시
console.log(isValidIP('192.168.1.1'));      // true
console.log(isValidIP('256.1.2.3'));        // false
console.log(isValidIP('1.2.3.4.5'));        // false
console.log(isValidIP('192.168.01.1'));     // false
console.log(isValidIP('192.168.1.1.'));     // false
console.log(isValidIP('192.168.1'));        // false
console.log(isValidIP('192.168.1.'));       // false


정규 표현식을 이용하면 더 간단하게 아래와 같이 IP 주소 유효성을 확인하는 함수를 만들 수 있습니다.

function isValidIPRegex(ipAddress) {
    const regex = /^(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]?)$/;
    return regex.test(ipAddress);
}


isValidIPRegex()를 이용한 예는 아래와 같습니다.

// 사용 예시
console.log(isValidIPRegex('192.168.1.1'));      // true
console.log(isValidIPRegex('256.1.2.3'));        // false
console.log(isValidIPRegex('1.2.3.4.5'));        // false
console.log(isValidIPRegex('192.168.01.1'));     // true
console.log(isValidIPRegex('192.168.001.001'));  // true
console.log(isValidIPRegex('192.168.1.1.'));     // false
console.log(isValidIPRegex('192.168.1'));        // false
console.log(isValidIPRegex('192.168.1.'));       // false

앞서 작성한 isValidIP() 함수와의 차이는 위 실행 결과에서 보이듯이, 각 부분에 "0"으로 시작하는 3자리 이하의 숫자도 올바르다고 판단하는 부분만 다릅니다.

 

위 정규 표현식은 다른 언어에서도 그대로 이용할 수 있습니다.