정규표현식 019. IP 주소 유효성 검사 1

조회 수 103796 추천 수 0 2012.02.02 09:17:30

IP 주소는 다들 아시죠? IP는 인터넷 프로토콜(Internet Protocol)의 약자입니다. 프로토콜은 쉽게 말해 통신 규약입니다. 나는 영어로 말하는데 상대방은 독일어 밖에 모른다면 소통이 안 되겠죠. 이처럼 프로토콜은 서로간에 통신이 가능하도록 해주는 일종의 규칙입니다. IP는 그러니까 인터넷상에서(또는 인트라넷상에서) 웹브라우저와 웹서버가 서로 신호를 주고받기 위한 하나의 약속입니다.


에궁, 이러다 짧은 실력 들통날라! 오늘 설명드릴 것은 IP가 아니라 IP 주소에 관한 것입니다. IP 주소는 아시다시피 4자리의 숫자로 되어 있습니다. 또한 각 자리는 1바이트씩입니다. 1바이트는 2의 8승이므로 모두 256가지가 나올 수 있습니다. 0부터 센다면 255까지가 되겠네요. 부호를 붙인다면 ?127부터 128까지가 되겠지만 주소에는 음수가 없죠?


210.113.22.1


위의 IP 주소는 유효합니다. 하지만


210.256.233.21


위의 IP 주소는 아닙니다. 256이 유효 범위를 벗어났습니다. 이처럼 IP 주소가 유효한지 아닌지를 판별하는 정규식에 대해 알아 보겠습니다. 15회에 소개해 드린 파이어폭스의 부가기능 ‘Regular Expression Tester’ 생각나시나요? 그것을 실행한 후 Options 버튼을 누르시고 맨 밑의 Settings를 선택하세요. 창이 하나 열리면 ‘Saved Expressions’를 누릅니다. 두 번째 줄에 있는 IPv4를 마우스로 클릭하신 후 오른쪽 Edit 버튼을 누르세요. 다시 창이 하나 열릴텐데 위에서 두 번째 Expression 박스에 포커스를 두고 Ctrl+A를 눌러 전체를 블록으로 잡은 뒤 Ctrl+C로 복사합니다. 그런 뒤 울트라 에디트 등에 붙이면 다음과 같은 정규식이 나올 것입니다.


^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$


이것이 바로 그 유명한 ‘IP 주소 유효성 검사를 위한 정규식’입니다. 어느 강좌에서나 안 빠지고 단골로 등장하는 넘이죠. 식이 좀 길긴 하지만 사실 별거 아닙니다. 지난번에 보여드린 20((11-02-(([0-1][0-9])|([2][0-8])))|(12-02-(([0-1][0-9])|([2][0-9]))))나 거기서 거기입니다. 우선 IP 주소의 유효성 자체를 알아보죠.


IP 주소는 네 단위로 구성됩니다. 그 각 단위의 규칙은 동일합니다. 그 규칙은,


1) 한 자리나 두 자리 숫자. 즉, 한 자리나 두 자리로만 구성돼 있는 경우는 어느 숫자라도 올 수 있음.

2) 1로 시작하는 세 자리 숫자. 즉, 1로 시작하기만 하면 그 다음 숫자들은 어느 것이라도 올 수 있음.

3) 2로 시작하는 세 자리 숫자 가운데 두 번째 자리가 0부터 4인 숫자. 이 경우 세 번째 자리에는 어느 숫자라도 올 수 잇음.

4) 2로 시작하는 세 자리 숫자 가운데 두 번째 자리가 5이고 세 번째 자리가 0부터 5인 숫자


이를 좀더 쉽게 풀어서 설명해 볼까요? 한 자리나 두 자리 숫자는 아무거라도 됩니다. 즉 2, 3, 99 등 다 됩니다. 문제는 세 자리일 때입니다. 1로 시작하는 세 자리 숫자는 뒤에 아무거나 와도 상관 없습니다. 그러나 2로 시작하는 세 자리 숫자는 두 번째 자리가 5를 넘어가면 안 됩니다. 즉 266 등은 허용될 수 없습니다. 또 두 번째 자리가 5인 경우는 세 번째 자리에 0부터 5까지만 와야 합니다.


위의 정규식에서 앞의 ^이나 뒤의 $는 꼭 들어가야 합니다. 아니면 다음과 같은 주소와도 매치가 됩니다.

266.23.2.2

244.233.21.266


위의 첫 줄과는 맨 앞의 2를 빼고 66.23.2.2과 매치됩니다. 두 번째 줄과는 뒤의 66을 빼고 244.233.21.2와 매치됩니다.


아무튼 위의 정규식을 보면 중간쯤 \.){3} 라는 게 보입니다. 이는 정규식의 4단위가 모두 동일하면서 마지막 단위 다음에는 마침표가 없기 때문에 그렇습니다. 즉 4단위가 모두 동일한 규칙을 갖고 있지만 마침표 때문에 마지막 한 단위만 따로 처리하는 것입니다. 실제로 자세히 보면 {3} 좌우의 정규식이 마침표만 빼고는 똑같다는 것을 알 수 있습니다.


List of Articles
번호 제목 글쓴이 날짜 조회 수
29 정규표현식 029. 자바스크립트의 정규식 5 마라톤맨 2012-03-28 20725
28 정규표현식 028. 자바스크립트의 정규식 4 마라톤맨 2012-03-09 10804
27 정규표현식 027. 자바스크립트의 정규식 3 마라톤맨 2012-03-02 10892
26 정규표현식 026. 자바스크립트의 정규식 2 마라톤맨 2012-02-27 12700
25 정규표현식 025. 자바스크립트의 정규식 1 마라톤맨 2012-02-22 33371
24 정규표현식 024. 숙제와 답 마라톤맨 2012-02-17 11658
23 정규표현식 023. 정규식의 옵션과 여러 정규식 엔진들 마라톤맨 2012-02-15 73940
22 정규표현식 022. 드라이브명과 디렉토리, 파일명 분리 2 마라톤맨 2012-02-13 27097
21 정규표현식 021. 드라이브명과 디렉토리, 파일명 분리 1 마라톤맨 2012-02-08 15283
20 정규표현식 020. IP 주소 유효성 검사 2 마라톤맨 2012-02-06 12203
» 정규표현식 019. IP 주소 유효성 검사 1 마라톤맨 2012-02-02 103796
18 정규표현식 018. 하위 표현식 3 마라톤맨 2012-01-30 11698
17 정규표현식 017. 하위 표현식 2 마라톤맨 2012-01-27 9992
16 정규표현식 016. 하위 표현식 1 마라톤맨 2012-01-25 11707
15 정규표현식 015. 최대 매치와 최소 매치 2 마라톤맨 2012-01-20 10673
14 정규표현식 014. 최대 매치와 최소 매치 1 마라톤맨 2012-01-18 14224
13 정규표현식 013. 검색할 위치 2 마라톤맨 2012-01-16 10546
12 정규표현식 012. 검색할 위치 1 마라톤맨 2012-01-13 10899
11 정규표현식 011. 검색 문자 개수 지정하기 머니북 2012-01-12 23790
10 정규표현식 010. 웹 서버 설정에도 필요 머니북 2012-01-11 14947