반응형

에러코드

에러내용

100

Continue

101

Switching Protocols

200

OK, 에러 없이 전송 성공

202

Accepted, 서버가 클라이언트의 명령을 받음

203

Non-authoritative Inform action, 서버가 클라이언트 요구 중 일부만 전송함

204

Non Content, 클라이언트 요구를 처리했으나 전송할 데이터가 없음

205

Reset Content

206

Partial Content

300

Mutiple Choices, 최근에 옮겨진 데이터를 요청함.

301

Moved Perm anently, 요구한 데이터를 변경된 임시 URL에서 찾음

302

Moved Perm anently, 요구한 데이터가 변경된 URL에 있음

303

See Other, 요구한 데이터를 변경하지 않았기 때문에 문제가 있음

304

Not modified

305

Use Proxy

400

Bad Request, 요청 실패 - 문법상 오류가 있어서 서버가 요청 사항을 이해하지 못함.

401.1

Unauthorized, 권한 없음 - 접속 실패, 이 에러는 서버에 로그온 하려는 요청 사항이 서버에 들어있는 권한과 비교했을 시 맞지 않을 경우 발생. 이 경우, 요청한 자원에 접근할 수 있는 권한을 부여받기 위해서 서버 운영자에게 요청해야 함.

401.2

Unauthorized, 권한 없음 - 서버 설정으로 인한 접속 실패, 이 에러는 서버에 로그온 하려는 요청사항이 서버에 들어있는 권한과 비교했을 때 맞지 않을 경우 발생. 이것은 일반적으로 적절한 www-authenticate head field를 전송하지 않아서 발생함.

401.3

Unauthorized, 권한 없음 - 자원에 대한 ACL에 기인한 권한 없음. 이 에러는 클라이언트가 특정 자원에 접근할 수 없을 때 발생. 이 자원은 페이지가 될 수도 있고, 클라이언트의 주소 입력란에 명기된 파일일 수도 있다. 또한, 클라이언트가 해당 주소로 접속할 때 이용되는 또 다른 파일일 수도 있다. 접근할 전체 주소를 다시 확인해 보고 웹 서버 운영자에게 여러분이 자원에 접근할 권한이 있는지를 확인한다.

401.4

Unauthorized, 권한 없음 - 필터에 의한 권한 부여 실패. 이 에러는 웹 서버가 서버에 접속하는 사용자들을 확인하기 위해 설치한 필터 프로그램이 있음을 의미함. 서버에 접속하는데 이용되는 인증 과정이 이런 필터 프로그램에 의해 거부된 것임

401.5

Unauthorized, 권한 없음 - ISA PI/CGI 어플리케이션에 의한 권한 부여 실패. 이 에러는 이용하려는 웹 서버의 어드레스에 ISA PICGI 프로그램이 설치되어 있어 사용자의 권한을 검증함. 서버에 접속하는데 이용되는 인증 과정이 이 프로그램에 의해 거부됨.

402

Payment Required, 예약됨

403.1

Forbidden, 금지 - 수행 접근 금지. 이 에러는 CGIISA-PI, 혹은 수행시키지 못하도록 되어 있는 디렉터리 내의 실행 파일을 수행시키려고 했을 때 발생함.

403.2

Forbidden, 금지 - 읽기 접근 금지. 이 에러는 브라우저가 접근한 디렉터리에 가용한 디폴트 페이지가 없을 경우에 발생함.

403.4

Forbidden, 금지 - SSL 필요. 이 에러는 접근하려는 페이지가 SSL로 보안 유지되고 있는 것일 때 발생.

403.5

Forbidden, 금지 - SSL 128이 필요. 이 에러는 접근하려는 페이지가 SSL로 보안 유지되고 있는 것일 때 발생. 브라우저가 128비트의 SSL을 지원하는지를 확인해야 함.

403.6

Forbidden, 금지 - IP 주소 거부됨. 이 에러는 서버가 사이트에 접근이 허용되지 않은 IP주소로 사용자가 접근하려 했을 때 발생함.

403.7

Forbidden, 금지 - 클라이언트 확인 필요. 이 에러는 접근하려는 자원이 서버가 인식하기 위해서 브라우저에게 클라이언트 SSL을 요청하는 경우 발생함. 자원을 이용할 수 있는 사용자임을 입증하는데 사용됨.

403.8

Forbidden, 금지 - 사이트 접근 거부. 이 에러는 웹 서버가 요청사항을 수행하고 있지 않거나, 해당 사이트에 접근하는 것을 허락하지 않았을 경우에 발생함.

403.9

Forbidden, 금지 - 연결된 사용자수 과다. 이 에러는 웹 서버가 busy한 상태에 있어서 요청을 수행할 수 없을 경우에 발생함.

403.10

Forbidden, 금지 - 설정이 확실하지 않음. 이 에러는 웹 서버의 설정 부분에 문제가 있을 경우 발생함.

403.11

Forbidden, 금지 - 패스워드 변경. 이 에러는 사용자 인증 단계에서 잘못된 패스워드를 입력했을 경우 발생함.

403.12

Forbidden, 금지 - Mapper 접근 금지. 이 에러는 클라이언트 인증용 맵(map)이 해당 웹 사이트에 접근하는 것을 거부할 경우에 발생.

404

Not Found, 문서를 찾을 수 없음 - 이 에러는 클라이언트가 요청한 문서를 찾지 못한 경우에 발생함. URL을 다시 잘 보고 주소가 올바로 입력되었는지를 확인함.

405

Method not allowed, 메소드 허용 안 됨 - 이 에러는 Request 라인에 명시된 메소드를 수행하기 위한 해당 자원의 이용이 허용되지 않았을 경우에 발생함.

406

Not Acceptable, 받아들일 수 없음 - 이 에러는 요청 사항에 필요한 자원은 요청 사항으로 전달된 Accept header에 따라 "Not Acceptable" 내용을 가진 사항이 있을 경우에 발생함.

407

Proxy Authentication Required, Proxy 인증이 필요함 - 이 에러는 해당 요청이 수행되도록 proxy 서버에게 인증을 받아야 할 경우에 발생함.

408

Request timeout, 요청 시간이 지남

409

Conflict

410

Gone, 영구적으로 사용할 수 없음.

411

Length Required

412

Precondition Failed, 선결조건 실패 - 이 에러는 Request-header filed에 하나 이상에 선결 조건에 대한 값이 서버에서의 테스트 결과 false로 나왔을 경우에 발생

413

Request entity too large

414

Request-URI too long, 요청한 URI가 너무 김 - 이 에러는 요청한 URI의 길이가 너무 길어서 서버가 요청 사항의 이행을 거부했을 경우 발생

415

Unsupported media type

500

Internal Server Error, 서버 내부 오류 - 이 에러는 웹 서버가 요청사항을 수행할 수 없을 경우에 발생함

501

Not Implemented, 적용 안 됨 - 이 에러는 웹 서버가 요청사항을 수행하는데 필요한 기능을 지원하지 않는 경우에 발생

502

Bad gateway, 게이트웨이 상태 나쁨 - 이 에러는 게이트웨이 상태가 나쁘거나 서버의 과부하 상태일 때 발생한다.

503

Service Unavailable, 서비스 불가능 - 이 에러는 서비스가 현재 멈춘 상태 또는 현재 일시적인 과부하 또는 관리 상황일 때 발생될 수 있다.

504

Gateway timeout

505

HTTP Version Not Supported 


반응형

'Web > JSP' 카테고리의 다른 글

[JSP] 장바구니 구현  (0) 2018.08.17
[JSP] request.sendRedirect 사용해서 페이지 넘기기  (0) 2018.08.17
[JSP] scope 범위  (0) 2018.08.17
[JSP] Get방식 Post방식 한글 깨짐 처리 방법  (0) 2018.08.17
반응형

[HTML 레이아웃]




[HTML 코드]

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<body>
    <form name=form method="post" onsubmit="return checkAll()">
      <table width=750 border="1px" align=center>
        <tr>
          <th colspan="2" bgcolor="#E4F7BA" >회원 기본 정보</th>
        </tr>
        <tr>
          <td>아이디</td>
          <td><input type="text" name="userId"> 4~12자의 영문 대소문자와 숫자로만 입력</td>
        </tr>
        <tr>
          <td>비밀번호</td>
          <td><input type="password" name="password1"> 4~12자의 영문 대소문자와 숫자로만 입력</td>
        </tr>
        <tr>
          <td>비밀번호 확인</td>
          <td><input type="password" name="password2"></td>
        </tr>
        <tr>
          <td>메일주소</td>
          <td><input type="text" name="mail"> 예)id@domain.com</td>
        </tr>
        <tr>
          <td>이름</td>
          <td><input type="text" name="name"></td>
        </tr>
        <tr>
          <td>주민등록번호</td>
          <td>
              <input type="text" name="identi1" style="width:70px">
              -
              <input type="password" name="identi2" style="width:70px">
              </td>
        </tr>
        <tr>
          <td>관심분야</td>
          <td>
            <input type="checkbox" name="favorite" value="컴퓨터">컴퓨터
            <input type="checkbox" name="favorite" value="인터넷">인터넷
            <input type="checkbox" name="favorite" value="여행">여행
            <input type="checkbox" name="favorite" value="영화감상">영화감상
            <input type="checkbox" name="favorite" value="음악감상">음악감상
          </td>
        </tr>
        <tr>
          <td>자기소개</td>
          <td><textarea name="introduceMyself" id=intro name=intro cols=50 rows=10></textarea>
            </td>
        </tr>
      </table>
      <p align=center>
        <input type="submit" name="join" value="회원 가입">
        <input type="reset" name="reset" value="다시 입력">
      </p>
    </form>
    </body>
cs


코드설명
1
<form name=form method="post" onsubmit="return checkAll()">
cs
submit 버튼을 누르면 script의 checkAll()가 호출된다.




[JavaScript 코드]



코드설명

checkAll()함수에서는 각각의 input값을 확인하는 함수를 호출하는 함수이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function checkAll() {
        if (!checkUserId(form.userId.value)) {
            return false;
        } else if (!checkPassword(form.userId.value, form.password1.value,
                form.password2.value)) {
            return false;
        } else if (!checkMail(form.mail.value)) {
            return false;
        } else if (!checkName(form.name.value)) {
            return false;
        } else if (!checkBirth(form.identi1.value, form.identi2.value)) {
            return false;
        } else if (!checkFavorite()) {
            return false;
        } else if (!checkIntro()) {
            return false;
        }
        return true;
    }
}
s

조건문을 보면 checkUserId함수에서 폼에 입력된 값이 유효성 검사에 맞으면 true를 return해준다.

따라서 if조건문 내로 들어가지 않으므로 다음 조건문을 실행하게 된다.

아래의 else if문도 마찬가지로 똑같이 수행한다.

함수의 매개변수로는 form내에 있는 해당되는 input태그의 id의 값을 가져온다.




1
2
3
4
5
6
7
8
// 공백확인 함수
    function checkExistData(value, dataName) {
        if (value == "") {
            alert(dataName + " 입력해주세요!");
            return false;
        }
        return true;
    }
cs

checkAll함수를 제외한 모든 함수에 첫번째로 들어가 있는 코드가 공백 확인 함수이다.

유효성 검사하면서 값이 공백이라면 "영문 대소문자와 숫자 4~12자리로 입력해야합니다!"라고 출력해도 되지만 공백임을 알려주기 위해 따로 함수로 빼내었다.

매개변수로 들어오는 value는 input태그의 값이고 dataName은 해당되는 input태그의 종류가 무엇인지 알려주는 String 변수이다.

값이 공백일 경우 alert를 통해 사용자에게 공백임을 알리고 false를 return하면서 이 함수를 호출한 함수를 끝내버린다.


이제부터 각각의 유효성 검사 함수를 알아보자.



먼저 볼 함수는 id를 검사하는 함수이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
    function checkUserId(id) {
        //Id가 입력되었는지 확인하기
        if (!checkExistData(id, "아이디를"))
            return false;
 
        var idRegExp = /^[a-zA-z0-9]{4,12}$///아이디 유효성 검사
        if (!idRegExp.test(id)) {
            alert("아이디는 영문 대소문자와 숫자 4~12자리로 입력해야합니다!");
            form.userId.value = "";
            form.userId.focus();
            return false;
        }
        return true//확인이 완료되었을 때
    }
cs

함수 매개변수로 넘어오는 값은 input태그에 들어가는 값이다.


3라인은 방금전 언급했던 공백확인 함수이다.

만약 id의 값이 공백일 경우 checkExistData함수에서는 false를 return해주므로 !에 의해 if조건문은 true가 된다.

4라인에서 return false를 해주면서 checkAll함수 2번3번 라인에서 script가 끝난다.


이어서 6라인은 아이디 유효성을 검사하는 정규표현식(Regular Expression)이다.

위의 코드에서 사용한 정규표현식을 간단하게 언급하고 가면..

→ / : 자바스크립트의 정규표현식의 처음과 끝을 의미한다.

→ [ ] : 문자셋이다. 예를 들면 [a-z]라고 적을경우 정규표현식에 만족해야하는 값들은 반드시 a~z사이의 값만 넣을 수 있다.

→ ^ : 문장의 처음을 뜻한다.

→ $ : 문장의 마지막을 뜻한다.

→ { } : 문자열 길이를 뜻한다. 예를 들어 {4,12}일 경우 최소 길이 4, 최대 길이 12이다.


/^[a-zA-z0-9]{4,12}$/ 을 분석하면..

→ 영문 대/소문자, 숫자만 사용할 수 있고 길이는 최소 4, 최대 12를 만족해야 정규표현식에 만족한다.


정규표현식에 대해 더 알아보고싶으면

→ https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/%EC%A0%95%EA%B7%9C%EC%8B%9D

여기 들어가서 참고하면 된다.


if조건문에서 test는 정규표현식과 id의 값이 일치하는지 아닌지 확인하는 함수이다.

일치하면 true를 return 일치하지 않으면 false를 return한다.

만약 일치하지 않을 경우 사용자에게 해당 조건을 알려주는 알림창을 띄워준다.

그리고 폼에 입력된 값을 공백으로 초기화하고 포커스를 맞춰준다.


정규표현식과 id의 값이 같을 경우 return true를 하고 다음 함수를 실행한다.



다음은 비밀번호 검사 함수이다.

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
    function checkPassword(id, password1, password2) {
        //비밀번호가 입력되었는지 확인하기
        if (!checkExistData(password1, "비밀번호를"))
            return false;
        //비밀번호 확인이 입력되었는지 확인하기
        if (!checkExistData(password2, "비밀번호 확인을"))
            return false;
 
        var password1RegExp = /^[a-zA-z0-9]{4,12}$///비밀번호 유효성 검사
        if (!password1RegExp.test(password1)) {
            alert("비밀번호는 영문 대소문자와 숫자 4~12자리로 입력해야합니다!");
            form.password1.value = "";
            form.password1.focus();
            return false;
        }
        //비밀번호와 비밀번호 확인이 맞지 않다면..
        if (password1 != password2) {
            alert("두 비밀번호가 맞지 않습니다.");
            form.password1.value = "";
            form.password2.value = "";
            form.password2.focus();
            return false;
        }
 
        //아이디와 비밀번호가 같을 때..
        if (id == password1) {
            alert("아이디와 비밀번호는 같을 수 없습니다!");
            form.password1.value = "";
            form.password2.value = "";
            form.password2.focus();
            return false;
        }
        return true//확인이 완료되었을 때
    }    
cs

비밀번호가 만족해야할 조건은 

1. 영문 대/소문자와 숫자 4~12자리로 입력할 것

2. 비밀번호 두번 입력했을 때 두번 다 일치할 것

3. 아이디와 비밀번호는 불일치 할 것


3~7라인은 비밀번호 / 비밀번호 확인이 공백인지 확인하기 위한 조건문이다.

조건문이 어떻게 동작하는지 알고싶을 땐 위의 checkId함수 설명을 참고하길 바란다.


checkPassword함수는 매개변수로 id와 두 개로 입력된 password를 받는다.


9~15라인은 비밀번호 유효성을 검사하는 코드로 아이디 유효성 검사 정규표현식과 같다.

위의 checkId함수 설명을 참고하길 바란다.


만약 두번 입력된 값이 틀릴경우 17~23라인 조건문을 실행한다.

사용자에게 입력된 두 비밀번호가 일치하지 않음을 알려준다.

그리고 두 비밀번호 입력창을 공백으로 설정해준 다음 포커스를 첫번째 비밀번호 입력창에 준다.

마지막으로 return false


만약 아이디와 비밀번호가 같을 경우 26~32라인 조건문을 실행한다.

아래의 조건문 실행은 위의 비밀번호 일치 여부 확인하는 조건문과 같다.


비밀번호 모든 조건이 맞을 경우 true를 return..



다음은 이메일을 검사하는 함수이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
    function checkMail(mail) {
        //mail이 입력되었는지 확인하기
        if (!checkExistData(mail, "이메일을"))
            return false;
 
        var emailRegExp = /^[A-Za-z0-9_]+[A-Za-z0-9]*[@]{1}[A-Za-z0-9]+[A-Za-z0-9]*[.]{1}[A-Za-z]{1,3}$/;
        if (!emailRegExp.test(mail)) {
            alert("이메일 형식이 올바르지 않습니다!");
            form.mail.value = "";
            form.mail.focus();
            return false;
        }
        return true//확인이 완료되었을 때
    }
cs

6라인.. 이메일 정규표현식을 보면 

→ ^[A-Za-z0-9_]+[A-Za-z0-9] : 이메일의 경우 첫글자 _가 허용되므로 첫번째 글자 검사식을 따로 두었다.

그 뒤 영문 대/소문자 숫자만 사용 할 수 있게 조건을 걸었다.

*[@]{1} : @는 반드시 하나만 입력되어야 한다.

*[.]{1} : .은 반드시 하나만 입력되어야 한다.

[A-Za-z]{1,3} : 최소 한글자 최대 세글자 까지 입력 가능하다.


7~12라인은 정규표현식과 이메일의 값이 일치하지 않을 경우 조건문을 실행한다.


이메일 값이 정규표현식에 만족할 경우 return true.



다음은 이름 검사 함수이다.

1
2
3
4
5
6
7
8
9
10
11
    function checkName(name) {
        if (!checkExistData(name"이름을"))
            return false;
 
        var nameRegExp = /^[가-힣]{2,4}$/;
        if (!nameRegExp.test(name)) {
            alert("이름이 올바르지 않습니다.");
            return false;
        }
        return true//확인이 완료되었을 때
    }
cs


5라인은 한글만 입력할 수 있는 정규표현식이다.


이름 값이 정규표현식에 만족할 경우 return true.



다음은 주민등록번호를 검사하는 함수이다.


주민등록번호 유효성을 검사하는 식이 따로 있는데 

주민등록번호 13자리를...

 

1

× 

 

 


주민등록번호 13번째 자리 값을 제외하고 위아래로 각각 값을 곱한 후 각 결과값을 모두 더한다.

더한 값을 sum이라 하면

<11 - (sum % 11) %10>

위의 식에서 도출되는 값과 주민등록번호 13번째 값과 일치하면 유효한 주민등록번호이다.


이를 토대로 주민등록번호 검사하는 함수를 보면..

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
39
40
41
42
43
44
    function checkBirth(identi1, identi2) {
        //birth이 입력되었는지 확인하기
        if (!checkExistData(identi1, "주민등록번호를 ")
                || !checkExistData(identi2, "주민등록번호를 "))
            return false;
 
        var totalIdenti = "" + identi1 + identi2;
 
        var identiArr = new Array();
        var sum = 0;
        var plus = 2;
 
        //배열에 주민등록번호 입력 후 유효값 확인하기 위해 sum에 저장
        for (var i = 0; i < 12; i++) {
            identiArr[i] = totalIdenti.charAt(i);
            if (i >= 0 && i <= 7) {
                sum += totalIdenti[i] * plus;
                plus++;
                if (i == 7)
                    plus = 2;
            } else {
                sum += totalIdenti[i] * plus;
                plus++;
            }
        }
        //주민등록번호 길이 확인하기
        if (identiArr.length < 12) {
            alert("주민등록번호는 13자리입니다.");
            form.identi1.value = "";
            form.identi2.value = "";
            form.identi1.focus();
            return false;
        }
        //주민등록번호 유효한지 확인
        var result = 11 - (sum % 11) % 10
        if (result != totalIdenti.charAt(12)) { //주민등록번호가 유효하지 않은 경우
            alert("유효하지않은 주민번호입니다.");
            form.identi1.value = "";
            form.identi2.value = "";
            form.identi1.focus();
            return false;
        }
        return true//확인이 완료되었을 때
    }
cs

매개변수가 두개인 이유는 폼에서 주민번호 입력창을 두개로 두었다.

이 때문에 totalIdenti라는 변수에 문자열 결합을 해준다.


13~24라인은 유효성 검사를 위해 totalIdenti 값을 identiArr배열에 하나하나 입력을 해준다.

배열에 입력하면서 sum값을 바로 계산해 준다.


위의 주민등록번호 유효성 검사 표를 보면 1번째부터 8번째 자리까지 2부터 순차적으로 값이 올라가면서 곱해지다가

9번째 자리부터는 다시 2로 돌아간다.

6~24라인이 이를 조건식으로 변환한 라인이다.


27~33라인은 주민등록번호 길이가 13자리인지 확인하고


마지막으로 35~42라인이 주민등록번호가 유효한지 확인하는 조건식이다.


주민등록번호가 모든 조건에 만족하였을 경우 return true



다음은 관심분야에서 하나 이상 체크되었는지 확인하는 함수다.

1
2
3
4
5
6
7
8
9
10
11
12
    function checkFavorite() {
        var checkedFavorite = document.getElementsByName("favorite");
 
        //체크된 값이 하나라도 있을경우 바로 true
        for (var i = 0; i < checkedFavorite.length; i++) {
            if (checkedFavorite[i].checked == true) {
                return true;
            }
        }
        alert("관심분야를 체크해주세요!");
        return false;
    }
cs

document.getElementsByName("favorite")는 HTML에서 같은 name("favorite")으로 묶인 checkbox의 값을 배열로 가져온다.


5~9라인은 체크된 값이 하나라도 있을 경우 바로 true를 return시켜줌으로써 함수를 끝낸다.

for문에서 return되지 않는다면 체크된 값이 하나라도 되지 않는 경우이므로 알림창을 띄워주고 return false를 한다.



마지막으로 자기소개 항목에서 값이 들어있는지 확인하는 함수이다.

1
2
3
4
5
6
7
8
    function checkIntro() {
        var text = document.getElementById("intro");
        if (!checkExistData(text.value, "자기소개를")) {
            alert("자기소개를 입력해 주세요!");
            return false;
        } else
            return true;
    }
cs

document.getElementById("intro")는 HTML에서 id("intro")를 가져와 그에 해당되는 값을 입력해준다.

만약 값이 공백일 경우 알림창을 띄워주고 return false를 한다.




전체적인 JavaScript코드이다.

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
<script language="javascript">
    function checkAll() {
        if (!checkUserId(form.userId.value)) {
            return false;
        }
        if (!checkPassword(form.userId.value, form.password1.value,    form.password2.value)) {
            return false;
        }
        if (!checkMail(form.mail.value)) {
            return false;
        }
        if (!checkName(form.name.value)) {
            return false;
        }
        if (!checkBirth(form.identi1.value, form.identi2.value)) {
            return false;
        }
        if (!checkFavorite()) {
            return false;
        }
        if (!checkIntro()) {
            return false;
        }
 
        return true;
    }
 
    // 공백확인 함수
    function checkExistData(value, dataName) {
        if (value == "") {
            alert(dataName + " 입력해주세요!");
            return false;
        }
        return true;
    }
 
    function checkUserId(id) {
        //Id가 입력되었는지 확인하기
        if (!checkExistData(id, "아이디를"))
            return false;
 
        var idRegExp = /^[a-zA-z0-9]{4,12}$///아이디 유효성 검사
        if (!idRegExp.test(id)) {
            alert("아이디는 영문 대소문자와 숫자 4~12자리로 입력해야합니다!");
            form.userId.value = "";
            form.userId.focus();
            return false;
        }
        return true//확인이 완료되었을 때
    }
 
    function checkPassword(id, password1, password2) {
        //비밀번호가 입력되었는지 확인하기
        if (!checkExistData(password1, "비밀번호를"))
            return false;
        //비밀번호 확인이 입력되었는지 확인하기
        if (!checkExistData(password2, "비밀번호 확인을"))
            return false;
 
        var password1RegExp = /^[a-zA-z0-9]{4,12}$///비밀번호 유효성 검사
        if (!password1RegExp.test(password1)) {
            alert("비밀번호는 영문 대소문자와 숫자 4~12자리로 입력해야합니다!");
            form.password1.value = "";
            form.password1.focus();
            return false;
        }
        //비밀번호와 비밀번호 확인이 맞지 않다면..
        if (password1 != password2) {
            alert("두 비밀번호가 맞지 않습니다.");
            form.password1.value = "";
            form.password2.value = "";
            form.password2.focus();
            return false;
        }
 
        //아이디와 비밀번호가 같을 때..
        if (id == password1) {
            alert("아이디와 비밀번호는 같을 수 없습니다!");
            form.password1.value = "";
            form.password2.value = "";
            form.password2.focus();
            return false;
        }
        return true//확인이 완료되었을 때
    }
 
    function checkMail(mail) {
        //mail이 입력되었는지 확인하기
        if (!checkExistData(mail, "이메일을"))
            return false;
 
        var emailRegExp = /^[A-Za-z0-9_]+[A-Za-z0-9]*[@]{1}[A-Za-z0-9]+[A-Za-z0-9]*[.]{1}[A-Za-z]{1,3}$/;
        if (!emailRegExp.test(mail)) {
            alert("이메일 형식이 올바르지 않습니다!");
            form.mail.value = "";
            form.mail.focus();
            return false;
        }
        return true//확인이 완료되었을 때
    }
 
    function checkName(name) {
        if (!checkExistData(name"이름을"))
            return false;
 
        var nameRegExp = /^[가-힣]{2,4}$/;
        if (!nameRegExp.test(name)) {
            alert("이름이 올바르지 않습니다.");
            return false;
        }
        return true//확인이 완료되었을 때
    }
 
    function checkBirth(identi1, identi2) {
        //birth이 입력되었는지 확인하기
        if (!checkExistData(identi1, "주민등록번호를 ")
                || !checkExistData(identi2, "주민등록번호를 "))
            return false;
 
        var totalIdenti = "" + identi1 + identi2;
 
        var identiArr = new Array();
        var sum = 0;
        var plus = 2;
 
        //배열에 주민등록번호 입력 후 유효값 확인하기 위해 sum에 저장
        for (var i = 0; i < 12; i++) {
            identiArr[i] = totalIdenti.charAt(i);
            if (i >= 0 && i <= 7) {
                sum += totalIdenti[i] * plus;
                plus++;
                if (i == 7)
                    plus = 2;
            } else {
                sum += totalIdenti[i] * plus;
                plus++;
            }
        }
        //주민등록번호 길이 확인하기
        if (identiArr.length < 12) {
            alert("주민등록번호는 13자리입니다.");
            form.identi1.value = "";
            form.identi2.value = "";
            form.identi1.focus();
            return false;
        }
        //주민등록번호 유효한지 확인
        var result = 11 - (sum % 11) % 10
        if (result != totalIdenti.charAt(12)) { //주민등록번호가 유효하지 않은 경우
            alert("유효하지않은 주민번호입니다.");
            form.identi1.value = "";
            form.identi2.value = "";
            form.identi1.focus();
            return false;
        }
        return true//확인이 완료되었을 때
    }
    function checkFavorite() {
        var checkedFavorite = document.getElementsByName("favorite");
 
        //체크된 값이 하나라도 있을경우 바로 true
        for (var i = 0; i < checkedFavorite.length; i++) {
            if (checkedFavorite[i].checked == true) {
                return true;
            }
        }
        alert("관심분야를 체크해주세요!");
        return false;
    }
 
    //자기소개가 입력되었는지 확인하기
    function checkIntro() {
        var text = document.getElementById("intro");
        if (!checkExistData(text.value, "자기소개를")) {
            alert("자기소개를 입력해 주세요!");
            return false;
        } else
            return true;
    }
</script>
cs


★ 잘못된 정보나 피드백은 언제든 환영입니다. ★


반응형

'Web > HTML_JS_CSS' 카테고리의 다른 글

[Javascript] Script 파일의 위치와 onload..  (2) 2019.01.08
[Javascript] Javascript 사용 방법  (2) 2019.01.08
[css] 선택자  (2) 2019.01.07
[HTML] 회원가입 폼 만들기  (0) 2018.08.17
[HTML/JavaScript] 계산기 만들기  (0) 2018.07.30
반응형

레이아웃 디자인은 수업시간에 강사님께서 제시해준 레이아웃이다.




<loginFom.html>

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
<html>
    <head>
        <title> 로그인 폼 </title>
    </head>
    <body>
    <form name=form method="post" action="mailto:olsh1108o@daum.net">
      <table width=650 border="1px" align=center>
        <tr>
          <th colspan="2" bgcolor="#E4F7BA" >회원 기본 정보</th>
        </tr>
        <tr>
          <td>아이디</td>
          <td><input type="text" name="id"> 4~12자의 영문 대소문자와 숫자로만 입력</td>
        </tr>
        <tr>
          <td>비밀번호</td>
          <td><input type="password" name="password"> 4~12자의 영문 대소문자와 숫자로만 입력</td>
        </tr>
        <tr>
          <td>비밀번호 확인</td>
          <td><input type="password" name="repeatPassword"></td>
        </tr>
        <tr>
          <td>메일주소</td>
          <td><input type="text" name="mail"> 예)id@domain.com</td>
        </tr>
        <tr>
          <td>이름</td>
          <td><input type="text" name="name"></td>
        </tr>
        <tr>
          <td colspan=2 bgcolor="#E4F7BA" align=center><B>개인 신상 정보</B</td>
        </tr>
        <tr>
          <td>주민등록번호</td>
          <td><input type="text" name="birth"> 예)000000-0000000</td>
        </tr>
        <tr>
          <td>생일</td>
          <td>
            <input type="text" name="year">년
            <select name="month" >
              <option value="01" selected(초기 선택된 항목)>01</option>
              <option value="02">02</option>
              <option value="03">03</option>
              <option value="04">04</option>
             <option value="05">05</option>
             <option value="06">06</option>
             <option value="07">07</option>
             <option value="08">08</option>
             <option value="09">09</option>
             <option value="10">10</option>
             <option value="11">11</option>
             <option value="12">12</option>
          </select>월
          <select name="day">
              <option value="01" selected(초기 선택된 항목)>01</option>
              <option value="02">02</option>
              <option value="03">03</option>
              <option value="04">04</option>
             <option value="05">05</option>
             <option value="06">06</option>
             <option value="07">07</option>
             <option value="08">08</option>
             <option value="09">09</option>
             <option value="10">10</option>
             <option value="11">11</option>
              <option value="12">12</option>
              <option value="13">13</option>
              <option value="14">14</option>
             <option value="15">15</option>
             <option value="16">16</option>
             <option value="17">17</option>
             <option value="18">18</option>
             <option value="19">19</option>
             <option value="20">20</option>
             <option value="21">21</option>
             <option value="22">22</option>
              <option value="23">23</option>
              <option value="24">24</option>
             <option value="25">25</option>
             <option value="26">26</option>
             <option value="27">27</option>
             <option value="28">28</option>
             <option value="29">29</option>
             <option value="30">30</option>
             <option value="31">31</option>
           </select> 일
          </td>
        </tr>
        <tr>
          <td>관심분야</td>
          <td>
            <input type="checkbox" name="favorite" value="컴퓨터">컴퓨터
            <input type="checkbox" name="favorite" value="인터넷">인터넷
            <input type="checkbox" name="favorite" value="여행">여행
            <input type="checkbox" name="favorite" value="영화감상">영화감상
            <input type="checkbox" name="favorite" value="음악감상">음악감상
          </td>
        </tr>
        <tr>
          <td>자기소개</td>
          <td><textarea name="introduceMyself" cols=50 rows=10></textarea>
            </td>
        </tr>
      </table>
      <p align=center>
        <input type="submit" name="join" value="회원 가입">
        <input type="reset" name="reset" value="다시 입력">
      </p>
    </form>
    </body>
</html>


반응형

'Web > HTML_JS_CSS' 카테고리의 다른 글

[Javascript] Script 파일의 위치와 onload..  (2) 2019.01.08
[Javascript] Javascript 사용 방법  (2) 2019.01.08
[css] 선택자  (2) 2019.01.07
[JS] 회원가입 유효성 검사  (1) 2018.08.17
[HTML/JavaScript] 계산기 만들기  (0) 2018.07.30
반응형

[ 계산기 레이아웃 ]


[ HTML 코드 ]

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Calculator</title>
</head>
<body>
    <table width=500 align=center>
        <th colspan="5">계산기</th>
        <tr>
            <td colspan=5 align=center><input type="text" id="showText"
                style="width: 350pt; height: 20pt"></td>
        </tr>
        
        <tr>
            <td colspan=3 align=center><input type="button" id="clearBtn"
                onclick=clearAll() value="Clear" style="width: 130pt; height: 30pt"></td>
            <td colspan=2 align=left><input type="button" id="equal"
                onclick=getResult() value="=" style="width: 130pt; height: 30pt"></td>
        </tr>
        
        <tr>
            <td align=center><input type=button id=1 value=1
                onclick=selectedBtn(1) style="width: 40pt; height: 30pt"></td>
            <td align=center><input type=button id=2 value=2
                onclick=selectedBtn(2) style="width: 40pt; height: 30pt"></td>
            <td align=center><input type=button id=3 value=3
                onclick=selectedBtn(3) style="width: 40pt; height: 30pt"></td>
            <td align=center><input type=button id=plus value=+
                onclick=selectedOp("+") style="width: 40pt; height: 30pt"></td>
            <td align=left><input type=button id=square value=x^y
                onclick=selectedOp("^") style="width: 40pt; height: 30pt"></td>
        </tr>
        
        <tr>
            <td align=center><input type=button id=4 value=4
                onclick=selectedBtn(4) style="width: 40pt; height: 30pt"></td>
            <td align=center><input type=button id=5 value=5
                onclick=selectedBtn(5) style="width: 40pt; height: 30pt"></td>
            <td align=center><input type=button id=6 value=6
                onclick=selectedBtn(6) style="width: 40pt; height: 30pt"></td>
            <td align=center><input type=button id=minus value="-"
                onclick=selectedOp("-") style="width: 40pt; height: 30pt"></td>
            <td align=left><input type=button id=sin value="sin"
                onclick=mathText("_sin") style="width: 40pt; height: 30pt"></td>
        </tr>
        <tr>
            <td align=center><input type=button id=7 value=7
                onclick=selectedBtn(7) style="width: 40pt; height: 30pt"></td>
            <td align=center><input type=button id=8 value=8
                onclick=selectedBtn(8) style="width: 40pt; height: 30pt"></td>
            <td align=center><input type=button id=9 value=9
                onclick=selectedBtn(9) style="width: 40pt; height: 30pt"></td>
            <td align=center><input type=button id=multi value=*
                onclick=selectedOp("*") style="width: 40pt; height: 30pt"></td>
            <td align=left><input type=button id=cos value=cos
                onclick=mathText("_cos") style="width: 40pt; height: 30pt"></td>
        </tr>
        <tr>
            <td align=center><input type=button id=0 value=0
                onclick=selectedBtn(0) style="width: 40pt; height: 30pt"></td>
            <td align=center><input type=button id="plusNMinus" value="+/-"
                onclick=changeSign() style="width: 40pt; height: 30pt"></td>
            <td align=center><input type=button id=dot value="."
                onclick=selectedBtn('.') style="width: 40pt; height: 30pt"></td>
            <td align=center><input type=button id=divide value="/"
                onclick=selectedOp("/") style="width: 40pt; height: 30pt"></td>
            <td align=left><input type=button id=tan value="tan"
                onclick=mathText("_tan") style="width: 40pt; height: 30pt"></td>
        </tr>
    </table>
</body>
</html>
cs

코드설명

 [HTML_17Line] clearAll() : 설정된 변수 및 text value 초기화

 [HTML_19Line] getResult() : 입력된 값 계산 후 result 변수에 저장
 [HTML_24Line] selectedBtn(id) : 선택된 number 버튼의 값을 매개변수로 전달.
 [HTML_30Line] selectedOp(op) : 선택된 operation 버튼의 값을 매개변수로 전달.
 [HTML_45Line] mathText(text) : 선택된 버튼의 값을 매개변수로 전달.

[JS 코드 ]

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
<script language="javascript">
    var text1 = "";
    var op = "";
    var text2 = "";
    var result = "";
    var isDotSelected = false;
    
    function selectedBtn(id) {
        if(id==".") {
            isDotSelected = true;
        }
        if (op == "") { //첫번째 피 연산자 구분
            text1 += id;
        } else {
            text2 += id;
        } // end of if ~ else    
        
        document.getElementById('showText').value = document.getElementById('showText').value + id;
        
    } //end of selectedBtn function
    
    function selectedOp(id) {
        op = id;
        document.getElementById('showText').value = text1 + " " + op + " "
    } //end of selectedOp function
    
    function changeSign() {
        if(text1 == "") {
            alert("값이 없습니다.");
            return;
        } 
        
        if(parseFloat(text1) < 0) { // 값이 음수 -> 양수
            if(op == '') { //
                text1 = Math.abs(parseInt(text1));
                document.getElementById('showText').value = text1;
            } else if(parseFloat(text2) < 0) {
                text2 = Math.abs(parseInt(text2));
                document.getElementById('showText').value = text2;
            } 
        } else { //값 양수 -> 음수
            if(op == '') {
                text1 = '-' + text1;
                document.getElementById('showText').value = text1;
            } else {
                text2 = '-'+text2;
                document.getElementById('showText').value = text2;
            }
        }
    }
    
    function mathText(text) {
        if(text1 == "") {
            alert("값이 없습니다.");
        }
        switch(text) {
        case "_sin" :
            result = Math.sin(parseInt(text1));
            document.getElementById('showText').value = text1 + "의 sin 값 : " + result;
            break;
        case "_cos" :
            result = Math.cos(parseInt(text1));
            document.getElementById('showText').value = text1 + "의 cos 값 : " + result;
            break;
        case "_tan" :
            result = Math.tan(parseInt(text1));
            document.getElementById('showText').value = text1 + "의 tan 값 : " + result;
            break;
        }
    }
 
    function clearAll() {
        text1 = "";
        text2 = "";
        op = "";
        result = "";
        document.getElementById('showText').value = "";
    }
    
    function getResult() { //=
        result = text1 + op + text2;
    
        if(isDotSelected) { //실수
            document.getElementById('showText').value = document.getElementById('showText').value + " = " + eval(result).toFixed(3);    
        } else {
            document.getElementById('showText').value = document.getElementById('showText').value + " = " + eval(result);
        }
        
        text1 = eval(result);
        op="";
        text2="";
        result = "";
        
        isDotSelected = false;
        
    } //end of getResult function
    
</script>
cs


<input type=text>에 들어갈 값들을 [text1] [op] [text2] = [result]로 구성하였다.


함수에 공통적으로 들어가 있는 아래의 코드는

document.getElementById('showText').value = document.getElementById('showText').value + ~ ; 

<input type=text>에 값을 입력하기 위한 문장이다.


● isDotSelected 변수는 '.'이 선택되었을 경우 실수로 값을 변경하기 위해 선언한 flag변수이다.


 function selectedBtn(id) { } 에서는 

선택된 버튼을 구분 후 text1 또는 text2에 입력을 해준다.

if (op == "") { //첫번째 피 연산자 구분
            text1 += id;
        } else {
            text2 += id;
        } // end of if ~ else    
        

위의 if문은 들어갈 값이 text1인지 text2인지 확인하기 위한 조건문이다.

만약 op가 공백이 아닐경우 text1은 입력이 된 상태이고 text2의 값을 넣을 것이다.



 function changeSign() { } 에서는 

text1 또는 text2의 값이 양수일 경우 음수로 / 음수일 경우 양수로 변경해주는 함수이다.

function changeSign() {
        if(text1 == "") {
            alert("값이 없습니다.");
            return;
        } 
        
        if(parseFloat(text1) < 0) { // 값이 음수 -> 양수
            if(op == '') { //
                text1 = Math.abs(parseInt(text1));
                document.getElementById('showText').value = text1;
            } else if(parseFloat(text2) < 0) {
                text2 = Math.abs(parseInt(text2));
                document.getElementById('showText').value = text2;
            } 
        } else { //값 양수 -> 음수
            if(op == '') {
                text1 = '-' + text1;
                document.getElementById('showText').value = text1;
            } else {
                text2 = '-'+text2;
                document.getElementById('showText').value = text2;
            }
        }
    }

Line 33 ~ 39 : 값이 음수일 경우 양수로 변경 해주는 조건문이다.

if문 내에 if~else문은 변경할 값이 text1인지 text2인지 확인후 변경 해주는 조건문이다.

Line 41 ~ 49 : 값이 양수일 경우 음수로 변경 해주는 조건문이다.

위의 if문과 마찬가지로 if문 내에 if~else문은 변경할 값이 text1인지 text2인지 확인후 변경 해주는 조건문이다.


● function mathText(text) { } 에서는

매개변수로 넘겨받은 값을 구분 후 sin, cos, tan계산을 해주는 함수이다.

    function mathText(text) {
        if(text1 == "") {
            alert("값이 없습니다.");
        }
        switch(text) {
        case "_sin" :
            result = Math.sin(parseInt(text1));
            document.getElementById('showText').value = text1 + "의 sin 값 : " + result;
            break;
        case "_cos" :
            result = Math.cos(parseInt(text1));
            document.getElementById('showText').value = text1 + "의 cos 값 : " + result;
            break;
        case "_tan" :
            result = Math.tan(parseInt(text1));
            document.getElementById('showText').value = text1 + "의 tan 값 : " + result;
            break;
        }
    }

내장 객체 Math내에 있는 Math.sin  Math.cos  Math.tan를 이용해 각각의 값을 구한다.


● 스크립트 내의 변수들과 HTML의 result를 보여주는 <input type=text>의 값을 초기화 하는 함수이다.

 
    function clearAll() {
        text1 = "";
        text2 = "";
        op = "";
        result = "";
        document.getElementById('showText').value = "";
    }
    


● 지금까지 입력된 값을 계산하는 함수이다.

    function getResult() { //=
        result = text1 + op + text2;
    
        if(isDotSelected) { //실수
            document.getElementById('showText').value = document.getElementById('showText').value + " = " 
+ eval(result).toFixed(3);    
        } else {
            document.getElementById('showText').value = document.getElementById('showText').value + " = " 
+ eval(result);
        }
        
        text1 = eval(result);
        op="";
        text2="";
        result = "";
        
        isDotSelected = false;
        
    } //end of getResult function

text1과 op, text2는 string문자열로 +를 이용해 result 변수에 모두 입력한다.

if조건문을 사용해 실수인지 정수인지 판별하고 조건문 내에서 문자열 result를 eval 내장 함수를 통해 계산한다.

실수 조건문에서 .toFixed(3)함수는 ( )안 숫자 자리수만큼 소수점을 끊어주는 역할을 한다.


★ eval 함수

문자열을 수식으로 바꿔주는 역할을 한다.


<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
<script language="javascript">
 
    var text1 = "10";
    var op = "+";
    var text2 = "20";
    
    var result = text1 + op + text2; // 10+20
    
    alert(eval(result)); //3
</script>
</head>
<body>
 
</body>
</html>
cs

문자열 result를 eval 내장 함수를 통해 수식으로 바꾼 후 바뀐 수식으로 계산 후 출력


반응형

'Web > HTML_JS_CSS' 카테고리의 다른 글

[Javascript] Script 파일의 위치와 onload..  (2) 2019.01.08
[Javascript] Javascript 사용 방법  (2) 2019.01.08
[css] 선택자  (2) 2019.01.07
[JS] 회원가입 유효성 검사  (1) 2018.08.17
[HTML] 회원가입 폼 만들기  (0) 2018.08.17

+ Recent posts