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
2015.02.22 12:41


울트라에디터 정규식 표현들입니다.

아래 정규식 사용 방식을 이용해서 소스코드나 장문의 글들에서 불규칙적인 표현들의 전체를 쉽게 찾거나 바꿀수 있습니다.
아래 내용은 울트라 에디터 홈페이지에서 발췌한 글입니다.
자세한 내용은 아래 사이트를 참고하세요



Simple String Matching

Simple string matching is probably the most basic form of regular expressions but can allow you to quickly exploit different patterns so that you can search for more than one string at a time rather than doing multiple Find operations.

UltraEdit RegExp:

Find What: m?n
Matches: "man" and "men" but not "moon"

Find What: t*t
Matches: "test", "tonight" and "tea time" (the "tea t" portion) but not "tea
time" (newline between "tea " and "time").

Find What: Te+st
Matches: "test", "teest", "teeeest", etc. but does not match "tst"

UNIX RegExp:

Find What: m.n
Matches: "man" and "men" but not "moon"

Find What: t.*t
Matches: "test", "tonight" and "tea time" (the "tea t" portion) but not "tea
time" (newline between "tea " and "time").

Find What: Te+st
Matches: "test", "teest", "teeeest", etc. but does not match "tst"



Character Sets

A character set is a group of characters bounded by "[" and "]". These may be used to designate specific characters to be matched or ranges (i.e. [aeud], or [a-z]).

UltraEdit RegExp:

Find What: [aeiou]
Matches: every vowel

NOTE: Regular Expressions in UltraEdit are not case-sensitive unless Match Case is selected in the Find dialog. 

Find What: [,.^?]
Matches: a literal ",", "." or "?".

Because the "?" is a symbol used in expressions it must be "escaped" for the literal character to be matched rather than interpreted as an expression.

Find What: [0-9a-z]
Matches: any digit or letter

Find What: [~0-9]
Matches: any character except a digit (~ means NOT the following)

UNIX RegExp:

Find What: [aeiou]
Matches: every vowel

Find What: [,\.?]
Matches: a literal ",", "." or "?".

Because the "." is a symbol used in expressions it must be "escaped" for the literal character to be matched rather than interpreted as an expression.

Find What: [0-9a-z]
Matches: any digit or letter

Find What: [^0-9]
Matches: any character except a digit (^ means NOT the following)



OR Expressions

Currently UltraEdit only allows for the specification of two operands for an OR expression. You may search for an expression A or B as follows:

UltraEdit RegExp:

Find What: ^{John^}^{Tom^}

UNIX RegExp:

Find What: (John|Tom)

There should be nothing between the two expressions. You may combine A or B and C or D in the same search as follows:

UltraEdit RegExp:

Find What: ^{John^}^{Tom^} ^{Smith^}^{Jones^}

UNIX RegExp:

Find What: (John|Tom) (Smith|Jone)

This will search for "John" or "Tom" followed by "Smith" or "Jones".



Deleting Blank Lines

With Regular Expressions selected in the Replace dialog this will match the a CR/LF (DOS line terminator) immediately followed by the end of a line (i.e., a blank line) and replace it with nothing, effectively deleting it:

UltraEdit RegExp:

Find What: ^p$
Replace With: (literally nothing)

UNIX RegExp:

Find What: \p$
Replace With: (literally nothing)



Reformatting Text With Tagged Expressions

Example 1:

Tagged expressions may be used to mark various data members so that they may be reorganized, reformatting the data. For example, it might be useful to be able to rearrange:

John Smith, 385 Central Ave., Cincinnati, OH, 45238

into:

45238, Smith, John, 385 Central Ave., Cincinnati, OH

UltraEdit RegExp:

Find What: %^([a-z]+^) ^([a-z]+^), ^(*^), ^(*^), ^(*^), ^([0-9]+^)
Replace With: ^6, ^2, ^1, ^3, ^4, ^5

UNIX RegExp:

Find What: ^([a-z]+) ([a-z]+), (.*), (.*), (.*), ([0-9]+)
Replace With: \6, \2, \1, \3, \4, \5


Example 2:

If you have a web-based registration system it might be useful to rearrange the order data into a format easily used by a database:

name = John Smith
address1 = 385 Central Ave.
address2 = 
city = Cincinnati
state = OH
zip = 45238

into:

John Smith, 385 Central Ave.,, Cincinnati, OH, 45238,

This can be done with the following expression:

UltraEdit RegExp:

Find What: name = ^([a-z ]+^)^paddress1 = ^([a-z 0-9.,]+^)^paddress2 = ^([a-z 0-9.,]++^)^pcity = ^([a-z]+^)^pstate = ^([a-z]+^)^pzip = ^([0-9^-]+^)
Replace With:^1, ^2, ^3, ^4, ^5, ^6

UNIX RegExp:

Find What: name = ([a-z ]+)\paddress1 = ([a-z 0-9.,]+)\paddress2 = ([a-z 0-9.,]*)\pcity = ([a-z]+)\pstate = ([a-z]+)\pzip = ([0-9^-]+)
Replace With:\1, \2, \3, \4, \5, \6

신고


Posted by injunech
2015.02.22 12:22



정규식 (UltraEdit 구문):


기호  기능

%   줄의 시작과 일치   줄의 시작에서 문자열 검색을 지시합니다. 그러나 검색된 문자열에서 줄 끝 문자를 포함하지 않습니다.

$    줄의 끝과 일치   줄의 끝에서 문자열 검색을 지시합니다. 그러나 검색된 문자열에서 줄 끝 문자를 포함하지 않습니다.

     새 줄을 제외한 하나의 문자와 일치

*    새 줄을 제외한 어떤 문자에서 발생한 숫자와 일치

+    + 문자 전의 문자로 시작하는 단어를 찾습니다.

++   바로 전의 문자/식과 일치, 0 또는 여러 번

^b   페이지 나눔과 일치

^p   새 줄과 일치 (CR/LF) (단락) (DOS 파일)

^r    새 줄과 일치 (CR 만) (단락) (MAC 파일)

^n   새 줄과 일치 (LF 만) (단락) (UNIX 파일)

^t    탭 문자와 일치

[ ]  한 문자와 일치 또는 대 괄호 [ ] 범위 내 일치

^{A^}^{B^}  식 A 또는 B와 일치

^     이어지는 정규식 문자 무시하기

^( ) 교체 명령에서 사용되는 브라켓 또는 태그 식. 정규식은 순서에 따른 9개의 태그 식을 가질 수 있습니다. 

      일치하는 교체식은 ^x (x는 1-9까지 범위)입니다. 예: ^(h*o^) ^(f*s^)이 "hello folks"와 일치하면 ^2 ^1은 그것을 "folks hello"으로 교체합니다.


참고 - ^ 는 문자입니다. '^'은 컨트롤 키 + 값이 아닙니다.


예:

        m n 은 "man", "men", "min" 과 일치 그러나 "moon"과 일치하지는 않습니다.


        t*t 는 "test", "tonight", "tea time" ("tea t" 일부)과 일치합니다. 그러나 

       "tea 

        time" ("tea "와 "time"의 새 줄) 과 일치하지 않습니다.


        Te+st 는 "test", "teest", "teeeest" 와 일치합니다. 그러나 "tst"와 일치하지 않습니다.


        [aeiou] 는 소문자 모음과 일치합니다.

        [,. ]는 문자 ",", "." , " "와 일치합니다.

        [0-9, a-z] 는 숫자와 소문자와 일치합니다.

        [~0-9] 는 숫자를 제외한 문자와 일치합니다. (~는 해당 내용이 아닌 경우)


아래와 같이 A 또는 B 형태의 식으로 검색할 수 있습니다:


"^{John^}^{Tom^}”


이것은 John 또는 Tom을 검색합니다. 식 사이에는 내용을 삽입할 수 없습니다.


아래와 같이 A 또는 B와 C 또는 D 형태를 조합하여 검색할 수 있습니다:


        "^{John^}^{Tom^} ^{Smith^}^{Jones^}"


이것은 John 또는 Tom 다음에 Smith 또는 Jones을 검색합니다.



예제 >

<table>

    <tr>

        <td>a

        </td>

    </tr>

</table>

<table>

    <tr>

        <td>b

        </td>

    </tr>

</table>


이런 소스에서


<table>

<tr>

  <td>


부분을 모두


<table style="height:100px">

<tr height="20">

  <td valign="middle">


으로 바꾸고 싶다면

Replace 를 아래와 같이 합니다.


검색 문자 : <table>^p <tr>^p  <td>

변경 문자 : <table style="height:100px">^p <tr height="20">^p  <td valign="middle">


예제 >

소스 편집을 하다보면 쓸 데 없이 엔터가 두 번 이상 들어갈 때가 많습니다.

아래와 같이 합니다.


검색 문자 : ^p^p

변경 문자 : ^p



예제 >

탭이 들어가 있는 경우

검색 문자 : ^t

변경 문자 : ,




예제 >


t*t 는 t, 그리고 갯수에 상관없는 문자열, 그리고 t 를 의미하니까

"tt", "test", "tonight" 이 참이 되며,

"tea time"과 같은 경우도 참이 되는데, 이 때 replace 에 걸리는 것은

tea time 이 아니라 tea t 가 됩니다.

"tea" 와 같은 경우는 거짓이겠죠

그리고, 

tea

time

과 같이 개행문자가 사이에 들어간 경우엔 잡히지 않습니다.




예제 >


        Te+st 는 "test", "teest", "teeeest" 와 일치합니다. 그러나 "tst"와 일치하지 않습니다.



예제 >


[aeiou] : 소문자로 된 영어 모음을 의미

[,. ] : ","나 "."나 " "를 의미

[0-9, a-z] 숫자 혹은 소문자 영문자를 의미

[~0-9] 어떤 문자든지 숫자를 제외한 문자를 의미 (~ 는 부정의 뜻이죠)



예제 >

아래와 같이 A 또는 B 형태의 식으로 검색할 수 있습니다: 

"^{John^}^{Tom^}”

이것은 John 또는 Tom을 검색합니다. 식 사이에는 내용을 삽입할 수 없습니다.




예제 >

아래와 같이 A 또는 B와 C 또는 D 형태를 조합하여 검색할 수 있습니다:


        "^{John^}^{Tom^} ^{Smith^}^{Jones^}"


이것은 John 또는 Tom 다음에 Smith 또는 Jones을 검색합니다.




예제 >

style값이나 classr값을 전체적으로 변경해야 할 경우가 있는데..

그럴땐 이런 식으로 썼습니다.


검색 문자 : style="*"

변경 문자 : style="height:100px"

검색 문자 : class="xxxxx"

변경 문자 : class="yyyy"

일케 하면 모든 값이 변경됩니다.


그리고,

검색 문자: <table*>

변경 문자 : <table border=1 cellpadding=0 cellspacing=0>

이렇게 해주면 모든 테이블이 한방에 일치하게 되겠죠..







찾을 문자열 : %^(^{[0-9]^}^{[0-9][0-9]^}^)

바꿀 문자열 : <font color=white><b>^1


숫자 (0~99) 로 시작하는 줄을 찾아서 줄의 시작에 태그 삽입하기.


찾을 문자열 : ^(<font color=white><b>*^)^p

바꿀 문자열 : ^1</font></b>^p 


해당 태그로 시작하는 줄 (줄 전체) + 개행문자 까지 찾아서 찾은 문자열의 끝에 종료태그를 삽입하기.

신고


Posted by injunech

티스토리 툴바