회원가입이나 value 체크를 할 때 정규식을 많이 사용하게 된다.
자주 사용할만한 함수를 모아서 한곳에 모아두면 편리해진다!
value 체크를 위한 js코드 ( join-util.js )
var joins = {
/**
* 공백체크
* @param str
* @returns {boolean}
*/
nullCheck : function (str){
if((!str)){
return true;
}
return false;
},
/**
* 아이디체크
* @param str
* @return {boolean}
*/
idCheck : function (str){
var check = /^[A-Za-z0-9+].{3,25}$/;
if((!str) || (!check.test(str))){
return true;
}
return false;
},
/**
* 길이체크 : 2글자 이상 ~ 10글자 이하
* @param str
* @returns {boolean}
*/
lenCheck : function (str){
var check = /^[가-힣]{2,10}$/;
if((!str) || (!check.test(str))){
return true;
}
return false;
},
lenCheck2 : function (str){
if((!str) || (str.length < 2)){
return true;
}
return false;
},
/**
* 숫자 확인
* @param num
* @return {boolean}
*/
numberCheck : function (str){
console.log(str);
var check = /[0-9]/g;
if((!str) || (!check.test(str))){
return true;
}
return false;
},
/**
* 이메일 형식 확인
* @param str
* @return {boolean}
*/
emailCheck : function (str){
var check = /^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]+$/;;
if((!str) || (!check.test(str))){
return true;
}
return false;
},
/** 패스워드는 6 ~ 20자 이내 영문 대,소문자, 숫자, 특수문자 혼합 입력
* 패스워드 형식 확인 : 영문/숫자/특수문자 조합 10자 이상
* @param str
* @return {boolean}
*/
passwordCheck : function (str){
var check = /^(?=.*[a-zA-Z])(?=.*[!@#$%^*+=-])(?=.*[!@#$%^*+=-])(?=.*[0-9]).{6,20}$/;
if((!str) || (!check.test(str))){
return true;
}
return false;
},
/**
* 패스워드 재확인
* @param str
* @param str2
* @return {boolean}
*/
pwConfirmCheck : function (str, str2){
if((!str2) || (str != str2)){
return true;
}
return false;
},
/**
* 전화번호 하이픈처리
* @param obj
*/
phoneKeyup : function (obj) {
$(obj).val($(obj).val().replace(/[^0-9]/g, "").replace(/(^02|^0505|^1[0-9]{3}|^0[0-9]{2})([0-9]+)?([0-9]{4})$/, "$1-$2-$3").replace("--", "-"));
},
/**
* 전화번호 확인 : hipen 포함
* @param str
* @returns {*}
*/
phoneCheck : function (str){
var check = /^01([0|1|6|7|8|9])-?([0-9]{3,4})-?([0-9]{4})$/;
if((!str) || (!check.test(str))){
return true;
}
return false;
},
/**
* 전화번호 하이픈 제거 : DB 저장시
* @param str
* @return {*}
*/
hyphenClear : function (str){
return str.replaceAll("-", "");
},
}
view에 가져와 사용을 해보자!
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<script src="/js/jquery-2.2.4.min.js"></script>
<script src="/js/common/join-util.js"></script>
<script src="/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" />
<link href="/css/bootstrap.min.css" rel="stylesheet">
<title>Title</title>
<script type="text/javascript">
function onChangeConfirm(obj, join, text) {
if($(obj).val().trim().length > 0){
if(join($(obj).val().trim())) {
$(obj).siblings().text(text);
confirmFail(obj);
return true;
}else{
confirmSuccess(obj);
return false;
}
}else if($(obj).val().trim().length === 0){
$(obj).removeClass('is-invalid');
$(obj).removeClass('is-valid');
$(obj).siblings().text("");
}
}
function confirmFail(obj){
$(obj).addClass('is-invalid');
$(obj).siblings().addClass('invalid-feedback');
$(obj).focus();
}
function confirmSuccess(obj){
$(obj).removeClass('is-invalid');
$(obj).addClass('is-valid');
}
</script>
</head>
<body>
<div class="form-group">
<label for="userId" class="col-sm-2 control-label">아이디</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="userId" id="userId" placeholder="아이디" data-minlength="4" required
onchange="onChangeConfirm(this, joins.emailCheck, '이메일형식으로 입력해 주세요.')">
<div class="float-right"></div>
</div>
</div>
<div class="form-group">
<label for="userName" class="col-sm-2 control-label">이름</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="userName" id="userName" placeholder="이름" data-minlength="2" required
onchange="onChangeConfirm(this, joins.lenCheck, '이름은 두글자 이상 입력해 주세요.' )">
<div></div>
</div>
</div>
</body>
</html>
코드를 분석해 보자면..
<script src="/js/jquery-2.2.4.min.js"></script>
extarnal 방식 으로 JS파일을 불러온다.
<input type="text" class="form-control" name="userId" id="userId" placeholder="아이디" data-minlength="4" required
onchange="onChangeConfirm(this, joins.emailCheck, '이메일형식으로 입력해 주세요.')">
<div class="float-right"></div>
input 태그에서 onchage이벤트 발생시 onchageConfirm 함수가 실행되고, 함수의 파라미터로 this(태그 자체), util안의 함수, 문자열을 받게 된다.
function onChangeConfirm(obj, join, text) {
if($(obj).val().trim().length > 0){
if(join($(obj).val().trim())) {
$(obj).siblings().text(text);
confirmFail(obj);
return true;
}else{
confirmSuccess(obj);
return false;
}
}else if($(obj).val().trim().length === 0){
$(obj).removeClass('is-invalid');
$(obj).removeClass('is-valid');
$(obj).siblings().text("");
}
}
onchageConfirm()
- $(obj).val() : this의 value
- join : util안의 함수(emailCheck) == 파라미터로 받았기 때문에 콜백 함수가 된다.
/**
* 이메일 형식 확인
* @param str
* @return {boolean}
*/
emailCheck : function (str){
var check = /^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]+$/;;
if((!str) || (!check.test(str))){
return true;
}
return false;
}
if문 안에 함수의 파라미터로 $(obj).val()를 넣어주면 함수의 실행에 따라 boolean값을 반환 받게 된다.
true를 반환 받을 시
$(obj).siblings() : this의 형제요소 == <div class="float-right"></div> 의 text에 파라미터로 받은 문자열을 넣어주면, 조건 실행시 text가 보여지게 된다.
실행화면