본문 바로가기

# JQuery

폼 유효성을 확인하는 방법

 

01. 필수항목이 입력이 되었는지 확인

$('.error').hide();
$('.submit').click(function(event){
    var data = $('.infobox').val();
    var len = data.length;
    if(len < 1){
        $('.error').show();
        event.preventDefault();
    }else{
        $('.error').hide();
    }
});

1. 처음엔 Error 메시지는 숨기고 Click Event 는 Submit 버튼에 연결

2. Click Event 의 이벤트 처리함수에서 Text Field 에 입력된  데이터 추출 data 변수에 저장

3. Data 의 길이를 구하여 IF문으로 구분 하여 처리 / preventDefault() 메소드는  submit > 서버전송 막는데 사용

02. 숫자 필드 유효성 확인

1. 숫자값만 허용
    $('.error').hide();
    $('.submit').click(function(event){
        var data = $('.infobox').val();
        var len = data.length;
        var c;
        for(var i=0;i<len;i++){
            c = data.charAt(i).charCoadeAt(0);
            if(c < 48 || c > 57){
                $('.error').show();
                event.preventDefault();
                break;
            }else{
                $('.error').hide();
            }
        }
    });

2. 음수값 허용
    $('.error').hide();
    $('.submit').click(function(event){
        var data = $('.infobox').val();
        var len = data.length;
        var c;
        for(var i=0;i<len;i++){
            c = data.charAt(i).charCoadeAt(0);
            if(c == 45 && i == 0){
                continue;
            }
            if(c < 48 || c > 57){
                $('.error').show();
                event.preventDefault();
                break;
            }else{
                $('.error').hide();
            }
        }
    });

3. 범위값 허용 (폼에 5 ~~ 99 사이의 수만 허용하고 작거나 큰값이 들어오면 에러메시지 표시)
    $('.error').hide();
    $('.submit').click(function(event){
        var data = $('.infobox').val();
        var len = data.length;
        var c=0;
        var age=0;
        var flag=0;
        for(var i=0;i<len;i++){
            c = data.charAt(i).charCoadeAt(0);
            if(c < 48 || c > 57){
                $('.error').show();
                flag = 1;
                event.preventDefault();
                break;
            }else{
                $('.error').hide();
            }
        }
        if(flag == 0){
            age = parseInt(data);
            if(age < 5 || age > 99){
                $('.error').show();
                $('.error').text('Invalid Age. Please enter the age within the range 5 to 99');
                event.preventDefault();
            }
        }
    });

-------------------------------------------------------------------------------------------------

# for 루프를 통해 charCodeAt() 함수를 이용 ASCII 값을 얻어서 처리

# 문자의 ASCII 값이 숫자 0 (ASCII 값 48) 이하이거나 숫자 9 (ASCII 값 57) 이상이면 그문자는 숫자가 아니라는 의미임.

-------------------------------------------------------------------------------------------------

03. 전화번호 유효성 확인

$('.error').hide();
$('.submit').click(function(event){
    var data = $('.infobox').val();
    if(validate_phoneno(data)){
        $('.error').hide();
    }else{
        $('.error').show();        // 주어진조건에 맞지 않을때 Error Message 를 보여줌.
        event.preventDefault();
    }
});

function validate_phoneno(ph){
    var pattern = new RegExp(/^[0-9-+]+$/);
    return pattern.test(ph);        // 정규식조건과 일치하면 True 그렇지 않으면 False 반환
}

-------------------------------------------------------------------------------------------------

# 텍스트 필드가 숫자와  -, + 기호 만을 갖도록 하는 jQuery 코드-

# data 변수는 유효성 확인을 위해 validate_phoneno() 에 전달됨

# validate_phoneno() 에서는 RegExp 클래스의 객체를 하나 생성함

# 전달된 정규식 /^[0-9-+]+$/ : Text Field 데이터는 0 ~ 9 사이의 숫자와  -, + 기호 로 시작하거나 끝이 나야만함.

-------------------------------------------------------------------------------------------------

* 정규식 패턴 : ^ 는 시작 , $ 는 끝 을 의미 // 닫기 대괄호 (]) 뒤의 + 기호는 이 패턴이 한번 or 그 이상 반복된다는 의미.

-------------------------------------------------------------------------------------------------

04. 사용자 아이디 유효성 확인

if(validate_userid(data)){ ....

function validate_userid(uid){
    var pattern = new RegExp(/^[a-z0-9_]+$/);
    return pattern.test(uid);        // 정규식조건과 일치하면 True 그렇지 않으면 False 반환
}

-------------------------------------------------------------------------------------------------

# 전달된 정규식 /^[a-z0-9_]+$/ :

Text Field 데이터(사용자ID) 는 a ~ z 사이문자, 0 ~ 9 사이숫자  _ (밑줄문자)  로 시작하거나 끝이나야 함.

-------------------------------------------------------------------------------------------------

05. 날짜 유효성 확인

if(validate_date(data)){ ....

function validate_date(date){
    var pattern = new RegExp(/\b\d{1,2}[\/-]\d{1,2}[\/-]\d{4}\b/);
    return pattern.test(date);
}}

-------------------------------------------------------------------------------------------------

# 전달된 정규식 /\b\d{1,2}[\/-]\d{1,2}[\/-]\d{4}\b/

  • 정규식의 처음\b단어의 경계를 나타냄, 패턴이 정확히 일치해야함
  • \d{1,2} 는 숫자가 1개 또는 2개가 나올수 있다는 의미임.
  • [\/-] 는 / 또는 - 기호가 허용된다는 의미임.
  • \d{4} 는 숫자가 4개 나와야 한다는 의미임.
  • mm/dd/yyyy or mm-dd-yyyy   >> 제약조건에 따른 형식

-------------------------------------------------------------------------------------------------

06. 이메일 주소

이메일주소의 정규식 패턴 : RegExp(/^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]+$/);

-------------------------------------------------------------------------------------------------

# 전달된 정규식 /^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]+$/

  • /^[\w-]+ 는 문자, 숫자, 밑줄문자, 또는 하이픈이 이메일주소 처음에 있을수 있다는 조건.
  • ^ 는 처음의 의미.
  • \w 는 문자, 숫자, 밑줄문자를 의미.
  • 닫기 대괄호 (]) 뒤의 + 기호는 하나또는 그이상이 올수 있다는 의미.
  • (\.[\w-]+)* . (마침표) 와 그 다음에 하나 이상의 문자, 숫자, 밑줄문자, 또는 하이픈이 0 번 또는 그 이상 나올수 있다는 의미이며 마지막에 * 기호는 0 번 또는 그이상 나올수 있다는 의미
  • @ 는 @기호가 이메일의 주소의 이 지점(앞에 정의한 식(Expression) ) 뒤에, 그리고 정의할식 앞에 나와야 한다는 의미 임.
  • ([\w-]+\.) 는 문자, 숫자, 밑줄문자, 하이픈이 한번이상 나오고 그 다음에 마침표가 나온다는 의미임. 그리고 이 해당 조합이 한번이상 나올수 있다는 의미.
  • [a-zA-Z]+$/ 는 메일 주소의 마지막을 정의 이메일 주소는 대문자, 소문자에 상관없이 문자(중복가능)로 끝나야한다는 의미.
  • $ 는 끝의 의미.

-------------------------------------------------------------------------------------------------

07. 체크박스 체크여부

# 여러개의 체크박스가 있고  해당 체크박스가 적어도 하나 이상의 체크여부를 확인한다.

$('.error').hide();
$('.submit').click(function(event){

var count = 0;
var amt = 0;

$('form').find(':checkbox').each(function(){            // 폼의 모든박스를 체크되어 있는지 하나씩 확인.
    if($(this).is(':checked')){
        count++;                // 체크박스가 체크되었을때 Count 를 +1
        amt = amt + parseInt($(this).val());
    }
});

if(count == 0){                // 체크박스 체크된 개수가 0 일때
    $('p.result').hide();
    $('.error').show();
}else{
    $('.error').hide();
    $('p.result').show();
    $('p.result').text('Your Bill is $' + amt);
}
event.preventDefault();

});
-------------------------------------------------------------------------------------------------

# Length 메소드로 체크박스 확인

$('.error').hide();
$('.submit').click(function(event){

var amt = 0;
var count = $('input:checked').length;

if(count == 0){
    $('p.result').hide();
    $('.error').show();
}else{
    $('form').find(':checkbox').each(function(){
        if($(this).is(':checked')){
            count++;
            amt = amt + parseInt($(this).val());
        }
    });
    $('.error').hide();
    $('p.result').show();
    $('p.result').text('Your Bill is $' + amt);
}
event.preventDefault();

});

-------------------------------------------------------------------------------------------------

08. 라디오 버튼 선택여부

$("input:checked").val();    =>    $("input:checked").attr("value");

$("input:checked").length;

$("td#ID값 input:checked").val();

$("td#ID값 input:checked").length;

-------------------------------------------------------------------------------------------------

09. Select 엘리먼트 항목 선택여부

$("select option:selected").val();    =>    $("select option:selected").text();

$("#ID값 select option:selected").val();

$("#ID값 option:selected").val();

$("Class값 option:selected").val();

$('.test option:selected').val();    // option이 selected 된 value 값
$('.test option:selected').text();    // option이 selected 된 text 값

// option 중 선택(selected) 된 위치의 index 값 (select option index값은 0부터 시작)
var index = $('.test option').index($('.test option:selected'));

// select 마지막에 해당 ( '<option value="last">마지막</option>' ) 추가
$('.test').append('<option value="last">last</option>');

// select 처음에 해당 ( '<option value="first">first</option>' ) 추가
$('.test').prepend('<option value="first">first</option>');

// 기존 select의 option대신 html 안에 내용으로 option 값을 새로 정의
$('.test').html('<option value="new">new</option>');

// 지정된 option값 replaceWith 안에 값으로 변경
$('.test option:eq(1)').replaceWith('<option value="bbb">option_change</option>');

$('.test option:eq(1)').remove();        // 지정된 option값 제거
$('.test option:first').remove();          // 처음 option값 제거
$('.test option:last').remove();          // 마지막 option값 제거
$('.test option').size();                    // select option의 갯수

// 선택된 option 앞의 option 갯수
$('.test option:selected').prevAll().size();

// 선택된 option 뒤의 option 갯수
$('.test option:selected').nextAll().size();

// 첫번째 option 뒤에 해당 ( '<option value="aaa">aaa</option>' ) 추가
$('.test option:eq(0)').after('<option value="aaa">aaa</option>');

// 세번째 option 뒤에 해당 ( '<option value="aaa">aaa</option>' ) 추가
$('.test option:eq(2)').before('<option value="aaa">aaa</option>');

// 지정된 option selected 하기
$('.test option:eq(0)').attr('selected', 'selected');

-------------------------------------------------------------------------------------------------

<select id="test" class="test" MULTIPLE>        // Multiple 속성시 Ctrl, Shift 로 다중 선택 가능함.

var selectedopts = "";
$("select option:selected").each(function(){
        selectedopts += $(this).text() + ",";        // 여러개 선택시 선택된 값을 TEXT 로 연결하여 표현
});

-------------------------------------------------------------------------------------------------

10. 폼버튼과 옵션에 스타일 적용

1. CSS 내 각각 다른 스타일을 만들어 준비

option{
        background-color:red;
        color:white;
}

.meal{
        background-color:blue;
        color:cyan;
}

2. 옵션 박스의 홀수번째 옵션에 .meal 클래스를 적용한다

$('option:odd').addClass('meal');

-------------------------------------------------------------------------------------------------

11. 체크박스 모두 체크 또는 체크 해제

<form>
    <div class="infobox"><input type="checkbox" id="checkall">Check/Uncheck all Checkboxes</div>
    <div class="infobox"><input type="checkbox" id="pizza" name="pizza">Pizza $5</div>
    <div class="infobox"><input type="checkbox" id="hotdog" name="hotdog">Hotdog $2</div>
    <div class="infobox"><input type="checkbox" id="coke" name="coke">Coke $1</div>
    <div class="infobox"><input type="checkbox" id="fries" name="fries">French Fries $3</div>
</form>

-------------------------------------------------------------------------------------------------

$('#checkall').click(function(){
    $("input[type='checkbox']").attr('checked', $('#checkall').is(':checked'));
});
$('form').find(':checkbox').click(function(){
    var amt = 0;
    $('div').filter(':gt(0)').find(':checkbox').each(function(){

if($('div:gt(0)')){
    if($(this).is(':checked')){
        amt = amt + parseInt($(this).val());
    }
}

});
$('p').remove();
$('<p>').insertAfter('div:eq(4)');            // index 값이 4인 div Element (마지막 체크박스) 다음에 넣는다.
$('p').text('Your Bill is $' + amt);

});

gt     >> 특정값 이후의 값을 찾는다. (great than : '~보다 큰' 의미 '>')
eq    >> 원하는 결과를 찾는다. (양수 입력시 index 0 부터 시작, 음수 입력시 index 값이 1부터 시작)

-------------------------------------------------------------------------------------------------

$("input[type='checkbox']").attr('checked',$('#checkall').is(':checked'));

  attr ( 속성, 값 )  

  • attr() 메소드는 선택한 엘리먼트의 속성을 정하는 데 사용 

  is ( 선택자 )  

  • is() 메소드는 선택한 엘리먼트와 선택자를 비교하여 일치하면 True를 반환, 그렇지않으면 False 반환

12. 두개필드 유효성 확인

# 두개의 필드가 있고, 해당 필드의 값이 모두 있어야 한다. 

<div><span class="label">User ID *</span><input type="text" class="infobox" id="userid" name="userid"><span class="error">This Field Cannot be blank</span></div>
<div><span class="label">Password *</span><input type="password" class="infobox" id="password" name="password"><span class="error">This Field Cannot be blank</span></div>

-------------------------------------------------------------------------------------------------

$('.error').hide();
$('.infobox').each(function(){
     $(this).blur(function(){            // 각 필드에 blur 이벤트(필드에 포커스 없어짐) 발생시
          var data = $(this).val();
          var len = data.length;
          if(len < 1){
               $(this).parent().find('.error').show();
          }else{
               $(this).parent().find('.error').hide();
          }
     });
}); 

-------------------------------------------------------------------------------------------------

# 서브밋 버튼 추가
$('.submit').click(function(event){

$('.infobox').each(function(){
     
$(this).blur(function(){            // 각 필드에 blur 이벤트(필드에 포커스 없어짐) 발생시
          var data = $(this).val();
          var len = data.length;
          if(len < 1){
               $(this).parent().find('.error').show();
          }else{
               $(this).parent().find('.error').hide();
          }
     });
});
evnent.preventDefault();

});

-------------------------------------------------------------------------------------------------

13. 비번필드, 비번확인 필드 비교

<div><span class="label">User ID</span><input type="text" class="userid" id="userid" name="userid"><span class="error">This Field Cannot be blank</span></div>
<div><span class="label">Password</span><input type="password" class="password" id="password" name="password"><span class="error">This Field Cannot be blank</span></div>
<div><span class="label">Confirm Password</span><input type="password" class="confpass" id="confpass" name="confpass"><span class="error">Password and Confirm Password don't Match</span></div>
<input class="submit" type="submit" value="Submit">

-------------------------------------------------------------------------------------------------
$('.submit').click(function(event){
      var data = $('.password').val();
      var len = data.length;
      if(len < 1){
           $('.password').next().show();
      }else{
           $('.password').next().hide();
      }
      if($('.password').val() != $('.confpass').val()){
           $('.confpass').next().show();
      }else{
           $('.confpass').next().hide();
      }

      evnent.preventDefault();
});

------------------------------------------------------------------------------------------------- 

  next ( 선택자 )  

  • 이 메소드는 선택자 표현식을 이용해서 해당 형제 엘리먼트를 찾는데 사용 >> 지정하지 않아도 됨.
  • 각 엘리먼트의 바로 다음 형제 엘리먼트 반환. >> nextAll() 은 다음의 모든 형제 엘리먼트 반환

14. 특정 필드 비활성화

-------------------------------------------------------------------------------------------------

$('.password').attr('disabled', true);
$('.confpass').attr('disabled', true);

$('.password').removeAttr('disabled');
$('.confpass').removeAttr('disabled', true);

-------------------------------------------------------------------------------------------------

15. 전체폼 유효성 확인

-------------------------------------------------------------------------------------------------

# 1 ~ 14 항목 조합.

-------------------------------------------------------------------------------------------------

16. 폼 데이터 직렬화

-------------------------------------------------------------------------------------------------

# Submit 버튼 클릭시 Form 내용 Serialize() 함수 이용

Input name >> UserID , Email Address

>> userid=John_123&emailaddress=john%40naver.com 

# Check Box, Radio Button, Select Box 도 동일하게 표시됨 (공백 '+' 로 표시)

-------------------------------------------------------------------------------------------------

 

'# JQuery' 카테고리의 다른 글

이벤트 처리 2  (0) 2015.08.23
이벤트 처리 1  (0) 2015.08.23
배열 관련  (0) 2015.08.20
JQuery....... Start  (0) 2010.11.16