ip값을 입력받을 경우 2가지 형식을 고려해야 한다.
첫번째로는 ipv4
두번째로는 ipv6

각 숫자는 0부터 시작할 수 있으나, 0 다음에 다른 숫자가 오면 안 됩니다 (예: 01은 무효).
var ipv4Pattern = /^((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]?)$/;
zero Compression으로 이중 콜론(::)은 모둔 0으로 구성된 하나이상의 그룹으로 구성된 단일 연속 문자열을 대체할 수 있다. 하지만 이중 콜론을 상요한 이 0 압축은 한번만 적용될 수 있다.
이유는? 그렇지 않으면 원래 ipv6주소는 단축된 표현에서 다시 생성할 수 없기 때문이다.

주소를 줄이는 다른 방법은 4개의 16진수 그룹에서 앞에 오는 0을 생략하는 것이다. 이 규칙은 선행 0에만 적용되고 후행0에는 적용되지 않는다.

위와 같은 규칙을 바탕으로 아래와 같이 정규식을 표현 했다.
var ipv6Pattern = /^([0-9a-fA-F]{1,4}:){7}([0-9a-fA-F]{1,4}|:)|(([0-9a-fA-F]{1,4}:){0,5}([0-9a-fA-F]{1,4}:)?:(:[0-9a-fA-F]{1,4}){1,5})$/i;