2015.04.05 17:01


IPv4 유효성 검사 정규식


설명 하기 앞서  정규식의 간단한 개념?적 의미는

일정한 규칙을 가진 문자열의 집합을 어떠한 형식으로 나타낼수 있는 형식 언어 라고 한다.


정규식을 이용하여 유효성 검사를 할때 / /로 감싸주어야 한다.

"를 사용하면 잘못된 방법


 IPv4 정규식은 아래와 같다.


/^(([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])$/

?

분석


?크게 정규식을 2개로 나누어 보았다.

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


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

?



1번부터 해석을 해보겠다.

?

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

 

? ^  :  뒤에오는 문자, 숫자로 정규식을 시작하겠다는 의미

 -> 위의 정규식을 보면 ^로 시작하고 소괄호로 감싸주었는데 다음 소괄호 안에 있는 정규식으로 시작 하겠다는 의미 이다.


[] 를 정규식에서는 META ?문자 라고 하는데 [] 안에 있는 문자로 정규식에 들어갈 범위를 지정해주는 것


[0-9] 0 ~ 9 까지 문자열을 사용하겠다는 의미

[1-9] 1 ~ 9 까지 문자열을 사용하겠다는 의미

[0-4] 0 ~ 4 까지 문자열을 사용하겠다는 의미

[0-5] 0 ~ 5 까지 문자열을 사용하겠다는 의미


이 정도 설명했으면 대충은 의미가 갈것이라고 생각한다.


뭐.. 0~9, 1~9 , 0~9 등등 뒤에 문자의 조합으로 시작하겠다는  의미구나

이제 나머지 이해가 되도록 설명을 하겠다.


| :  프로그래밍 공부를 조금이라도 한사람이라면  OR 라는 의미라는것을 대충 짐작을 했을텐데 맞다

     OR와 같은 의미


자 그럼 한층더 이해도가 높아 지지 않는가??!

정규식 안에 들어가는 1, 2, 25 는 그 형태 그대로 문자, 문자열 그대로 인식된다.

\. 은 문자열  comma 를 의미


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

시작    0~9  OR  1~9  0~9   OR   1 0~9       OR  2 0~4 0~9   OR  25 0~5   .


{n}을 설명하면 이제 모두 이해가 될것이다.

x{n} : n반 큼 반복하다. 즉 앞의 x가 n만큼 반복 될것이라는 의미



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

시작  (( 0~9  OR  1~9  0~9   OR   1 0~9       OR  2 0~4 0~9   OR  25 0~5   . ) <-앞의 모든 식이 3번 반복

                                                  ↑ 앞의 식이 2번 반복


자 다시한번 정리를 한다면

 ^  : 시작    

 [0-9]  : 0~9  - 1 자리 숫자   1,2,3,4,5,6,7,8,9,

 [1-9][0-9] : 1~9, 0~9  - 2자리 숫자  10~99

 1[0-9]{2}  : 1, 0~9, 0~9 - 3자리 숫자 100 ~ 199

 2[0-4][0-9] : 2, 0~4, 0~9 -  3자리 숫자 200 ~ 249

 25 [0-5] : 25, 0~5 - 3자리 숫자 250~ 255

--------여기까지 각 식마다 |가 붙었기때문에 1자리, 2자리, 3자리 숫자중 위의 조건에 맞춰 다 들어 갈수있다는것을 알수 있다.

  \.   :  . comma

{3} : 위의 숫자가  3번 반복 즉  Ip주소 1.255.11. 이런식의 문자가 들어갈수 있다는 의미

        최대 숫자가 255 인것은 ip주소에서 쓸수 있는 숫자가 255까지 표현 할수 있기 때문에


여기까지 1번 식의 설명이였다.. 1번이 이해가 된다면 2번도 마찬가지 이기때문에 충분이 분석이 가능할 것이다.


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


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


$ :  예) x$  x로 끝내겠다는 의미

즉 마지막에 $표시는 앞의 식으로 끝내겠다는 의미이다.



즉 77.11.22.33

이런식으로 끝내겠다는 의미이다.


JavaScript에 다음 정규식을 적용 시켜보는 예제이다.



function checkIpForm(ip_addr){
 
 var filter = /^(([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])$/;

 if (filter.test(ip_addr) == true){
  return false;
 } else{
  alert("IP 주소 형식이 틀립니다.");
  return true;
 }

}



참조 site

http://www.nextree.co.kr/p4327/


정규식을 테스트 해 볼수 있는 website이다. 정규식을 만들어보고 잘 맞는치 테스트 해볼수 있다.http://gskinner.com/RegExr/  


신고

'Programming > Etc' 카테고리의 다른 글

ASCII Code Table  (0) 2017.02.21
정규식 문법 이해  (0) 2015.04.05
2015년 프로그래밍 언어 사용률  (0) 2015.03.05
[Tistory] 티스토리 본문 폭 변경하기  (0) 2015.02.22
[Git] Git 설치 및 초기 설정  (0) 2015.02.16


Posted by injunech