자바 스크립트 공부<1> - indexof를 이용한 검사

Posted by lib oimb
2018. 8. 8. 18:10 html&css&js

평소 반복문을 이용해서 인덱스 변수를 이용해 하나하나 검사해줬던 방식만 사용 하였다 

그런데 indexof 방식이 속도가 빠르다고 하여서 권장한다고 하여 연습 해볼겸 사용해보았다.


indexof의 주의 할 점이 있는데 

포지션을 제대로 지정해주지 않으면 계속 처음부터 검사를 하게 된다는 점이다.

따라서

1. 포지션을 고려하지 않고 문자열을 잘르는 방식

또는 

2. indexof 의 첫 포지션을 지정해 주는 방식 

으로 해야한다.


먼저 어려운 1번 방법으로 먼저 해보자


1) 포지션을 고려하지 않고 문자열을 잘르는 방식.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/**
 * 
 */
//<![CDATA[
var userEmail = prompt("당신의 이메일 주소는?""");
var copyEmail = userEmail;
var arrUrl = [ ".co.kr"".com"".net"".or.kr""go.kr" ];
var check1 = false;
var check2 = false;
var count = 0;
var pos=-1;
 
if (userEmail.indexOf("@"!= 0) {
    
    while (true) {
        if ((pos = userEmail.indexOf("@")) > -1) {
            count++;
            userEmail = userEmail.slice(pos + 1);
        } else
            break;
    }
    if (count == 1) {
        check1 = true;
    }
}
 
for (var i = 0; i < arrUrl.length; i++) {
    if (userEmail.indexOf(arrUrl[i]) > 0)
        check2 = true;
}
 
if (check1 && check2) {
    document.write(copyEmail);
else {
    alert("이메일 형식이 잘못 되었습니다.")
}
 
//]]>
cs


특정 문자열을 찾을 때 마다 문자열을 자르고 다시 첨부터 검사 하는 방식이다.

그리고 이메일 중에 @ 가 바로 앞에 나올 수( pos 값이 0) 도 있으므로 사전에 검사한다.

그리고 이후에는 pos값이 앞에서 부터 계속 검사하므로 0 도 허용 한다.( abc@@naver.com 경우를 생각하면된다.)



이번에는 좀더 쉬운 indexof 의 처음 포지션을 지정해주는 방법을 보자.


2) 포지션을 고려하여 지정 해주는 방식.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/**
 * 
 */
//<![CDATA[
var userEmail = prompt("당신의 이메일 주소는?""");
var copyEmail = userEmail;
var arrUrl = [ ".co.kr"".com"".net"".or.kr""go.kr" ];
var check1 = false;
var check2 = false;
var count = 0;
var pos=0;
 
if (userEmail.indexOf("@"> 0) {    
    while (true) {
        pos = userEmail.indexOf("@",pos+1);
        if(pos > -1)
            count++;
        else
            break;
    }
    if (count == 1) {
        check1 = true;
    }
}
for (var i = 0; i < arrUrl.length; i++) {
    if (userEmail.indexOf(arrUrl[i]) > 0)
        check2 = true;
}
 
if (check1 && check2) {
    document.write(copyEmail);
else {
    alert("이메일 형식이 잘못 되었습니다.")
}
 
//]]>
cs

확실히 내용이 확줄어든 걸 알 수 있다.


따라서 inedxof 를 사용 할때는 포지션값을 생각해주고 코드를 짜는것이 더 좋아보인다.


예를 들어서 메일 검증으로 만들긴 했는데 사실 완벽한 검사는 아니다

단지 indexof 를 이용해 전부 찾는거에 집중 했으니 그 점만 알고가자




이 댓글을 비밀 댓글로