/** * 마지막 글자 받침체크 */ function isSingleCharacter(text){ var strGa = 44032 //가 var strHih = 55203 //힣 let lastStrCode = text.charCodeAt(text.length-1) if(lastStrCode < strGa || lastStrCode > strHih){ return false //한글이 아닌 경우 } return ((lastStrCode - strGa) % 28 == 0) } /** * 를/을 필터 * @param {*} text 필터 문자열 * @param {*} filter 필터 조사 neun : 는/은 leul :를/을 ro: 로/으로 */ function filterCheck(text, filter){ if(filter == '은' || filter == '는') return text + (isSingleCharacter(text) ? '는' : '은') if(filter == '을' || filter == '를') return text + (isSingleCharacter(text) ? '를' : '을') if(filter == '으로' || filter == '로') return text + (isSingleCharacter(text) ? '로' : '으로') if(filter == '이' || filter == '가') return text + (isSingleCharacter(text) ? '가' : '이') if(filter == '과' || filter == '와') return text + (isSingleCharacter(text) ? '와' : '과') } /** * @param {*} str 원본 문자열 * @param {*} target 문자열 교체 대상 * @param {*} filter 필터 조사 neun : 는/은 leul :를/을 ro: 로/으로 * @returns */ function getChangedStr(str, target){ if(!useUtil.isNull(str)){ let result = '' if(str.includes(target)){ let targetStr = str.substr(0, target.length+1) //조사를 변경하기 위해 교체대상의 다음문자까지 가져오기. let target2Str = str.substr(0, target.length+2) let lastStr = targetStr.substr(-1) if(target2Str.substr(-2) === '으로'){ lastStr = '으로' result = str.replace(target2Str, filterCheck(target, lastStr)) }else{ result = str.replace(targetStr, filterCheck(target, lastStr)) } }else{ result = str } return result } } /* * 뷰티파이 유효성 검사 */ let valid = { // 필수입력 required(fieldName){ return (value) => !!value || `${getChangedStr(fieldName+'을', fieldName)} 입력하세요.` }, //파일 필수 requiredFile(value){ return (input) => !!value || '파일을 첨부해주세요' }, // 셀렉트 필수입력 requiredSelect(fieldName){ return (value) => !!value || `${getChangedStr(fieldName+'을', fieldName)} 선택하세요.` }, // 로그인 > 아이디 체크 loginIdChk(value){ return /^[a-zA-Z0-9]{5,20}$/.test(value) || false }, // 로그인 > 비밀번호 체크 loginPwChk(value){ return /^(?=.*\d|.*[!@#$%^&*()-=_+])[A-Za-z\d!@#$%^&*()-=_+]{8,16}$/i.test(value) || false }, // 아이디 idRegChk(){ return (value) => /^[a-zA-Z0-9]{6,20}$/.test(value) || '영문, 숫자 6자리~20자리로 입력하세요.' }, // 비밀번호 passWordChk(){ // ^(?=.*[A-Za-z])(?=.*\d)(?=.*[\/\[`~!@#\$%^&\*|\\\'\x22;:\?\=\+_()\<\>\]])[A-Za-z\d\/\[`~!@#\$%^&\*|\\\'\x22;:\?\=\+_\(\)\<\>\]] // 영문, 특수문자, 숫자 중 두 종류는 필수로 들어가야함 // return (value) => /^(?=.*\d|.*[!@#$%^&*()-=_+])[A-Za-z\d!@#$%^&*()-=_+]{8,16}$/i.test(value) || `영문자, 숫자, 특수문자 조합하여 8자리 이상 입력하세요.` // 영문, 특수문자, 숫자 중 세 종류는 필수로 들어가야함 return (value) => /^(?=.*[a-zA-Z])(?=.*[!@#$%^*+=-])(?=.*[0-9]).{8,16}$/i.test(value) || `영문자, 숫자, 특수문자 조합하여 8자리 이상 입력하세요.` }, // 비밀번호 passWordChk2(){ return (value) => /^(?=.*\d|.*[!@#$%^&*()-=_+])[A-Za-z\d!@#$%^&*()-=_+]{8,16}$/i.test(value) || `비밀번호를 확인하세요.` }, // 이름 nameChk(fieldName){ return (value)=> /^[가-힣a-zA-Z]{2,20}$/.test(value) || `한글, 영문 2자리 ~ 20자리로 입력하세요.` }, // 이메일 emailChk(){ return (value)=> /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,50}))$/.test(value) || '이메일을 정확하게 입력하세요.' }, // 동일 비밀번호 passWordConfirm(target){ return (value) => (value && value === target) ||'신규 비밀번호와 동일하게 입력하세요.' }, // 전화번호(휴대폰 번호) callChk(){ return (value) => /^0([0-9]{1,2})-?([0-9]{3,4})-?([0-9]{4})$/.test(value) || '휴대폰 번호(전화번호)를 확인하세요.' }, // 휴대폰 번호연락처 phoneChk(){ return (value) => /^01([0|1|6|7|8|9]?)-?([0-9]{3,4})-?([0-9]{4})$/.test(value) || '휴대폰 번호를 확인하세요.' }, // min max minMaxChk(min, max){ return (value) => (value.length < min || value.length > max) ? `숫자 ${min}자리 ~ ${max}자리로 입력하세요.` : true }, // max maxChk(max){ return (value) => value.length <= max || `${max}자 이하 입력하세요.` }, // min minChk(min){ return (value) => value.length >= min || `${min}자 이상 입력하세요.` }, // 중복 체크 후 사용 가능한 아이디 abledChk(result, field){ return result === false || `사용할 수 없는 ${field}입니다.` }, // 아이디 t/f idStrChk(value){ return /^[a-zA-Z0-9]{6,20}$/.test(value) }, // 이메일 t/f emailStrChk(value){ return /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,50}))$/.test(value) }, // 연락처 t/f phoneStrChk(value){ return /^01([0|1|6|7|8|9]?)-?([0-9]{3,4})-?([0-9]{4})$/.test(value) }, //faq strMinMax(min, max){ return (value) => (value.length < min || value.length > max) ? `한글, 영문, 특수문자, 숫자 ${min}자리 ~ ${max}자리로 입력하세요.` : true }, // 로그인 > 아이디 찾기 / 비밀번호 재발급 // 이름 한글과 영문 2~20 자리 loginNameChk(value){ return /^[가-힣a-zA-Z]{2,10}$/.test(value) || false }, // 시스템 설정 > 관리자 계정 관리 : 이메일(입력칸이 두개로 분리되어있음) seperateEmailChk(emailId, emailAddr){ return this.emailStrChk(emailId + '@' + emailAddr) || '이메일을 정확하게 입력하세요.' }, // 시스템 설정 > 관리자 계정 관리 : 전화번호(입력칸이 새개로 분리되어있음) seperateContactChk(contact1, contact2, contact3){ return this.phoneStrChk(contact1 + '-' + contact2 + '-' + contact3 ) || '숫자 2자리 ~ 11자리로 입력하세요' }, // 필수 입력값 판단 requiredChk(str, fieldName){ return str == '' ? `${getChangedStr(fieldName+'을', fieldName)} 입력하세요.` : false }, // 이메일 에러 메시지 생성 emailErrorStrForChk(emailId, emailAddr){ return !(/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,50}))$/.test(emailId + '@' + emailAddr)) ? '이메일을 정확하게 입력하세요.' : false }, // 전화번호(휴대폰) 에러 메시지 생성 contactErrorStrForChk(contact){ return !(/^01([0|1|6|7|8|9]?)-?([0-9]{3,4})-?([0-9]{4})$/.test(contact)) ? '숫자 2자리 ~ 11자리로 입력하세요' : false }, // 시스템 설정 > 세대 계정 관리 : 전화번호(ID) 유효성 검사 세팅 phoneIdChk(){ return (value) => /^01([0|1|6|7|8|9]?)-?([0-9]{3,4})-?([0-9]{4})$/.test(value) || '전화번호(ID)를 확인하세요.' }, urlPattern(__VAL){ const patterUrl = new RegExp( "^(https?:\\/\\/)" + // 프로토콜 "((([a-zA-Z\\d]([a-zA-Z\\d-]*[a-zA-Z\\d])*))\\.)*" + // 서브도메인 "([a-zA-Z\\d]([a-zA-Z\\d-]*[a-zA-Z\\d])*\\.[a-zA-Z]{2,})" + // 도메인 "(\\:\\d+)?(\\/[-a-zA-Z\\d%@_.~+&:]*)*" + // 경로 "(\\?[;&a-zA-Z\\d%@_.,~+&:=-]*)?" + // 쿼리 문자열 "(\\#[-a-zA-Z\\d_]*)?$" // 앵커 ); return patterUrl.text(__VAL); } // /** // * P5G 추가 validation // * 생성 시 p5g를 앞에 붙여 생성[p5gRequired] // */ // p5gRequired(fieldName){ // let msg = '' // const language = useLangStore().getLang // if(language == 'kr') msg = `${getChangedStr(fieldName+'을', fieldName)} 입력하세요.` // else if(language == 'en') msg = `${fieldName} is required` // return (value) => !!value || msg // }, // p5gNumCheck(num, type) { // let checkNum = num.replace(/[^0-9]/g, '') // if(type === 'otp') { // // OTP키값 // if (num !== checkNum) { // num = checkNum // } else if(num.length > 6) { // num = num.slice(0, 6) // } // } else { // // 연락처 // let phoneNum = checkNum // if(phoneNum > 11) { // phoneNum = phoneNum.slice(0, 11) // } // // 입력한 숫자를 전화번호 형식으로 변환 // if (phoneNum.length > 7) { // // 3자리-4자리-4자리 형식 // phoneNum = phoneNum.replace(/(\d{3})(\d{4})(\d{4})/, '$1-$2-$3'); // } else if (phoneNum.length > 3) { // // 3자리-4자리 형식 // phoneNum = phoneNum.replace(/(\d{3})(\d{4})?/, '$1-$2'); // } // // 변환된 값을 다시 input에 설정 // num = phoneNum // } // return num // }, // /** // * 필수 선택 (0값도 있는값으로 판단) // */ // p5gRequiredSelect(fieldName) { // const language = useLangStore().getLang // return (value) => { // let isNotNull = value !== '' && value !== null && value !== undefined // let msg = '' // if(language == 'kr') msg = `${getChangedStr(fieldName + '을', fieldName)} 선택하세요.` // else if(language == 'en') msg = `${fieldName} is required select` // return isNotNull ? true : msg // } // }, // /** // * 필수 선택 (0값도 있는값으로 판단) // */ // p5gRequiredSelect(fieldName) { // const language = useLangStore().getLang // return (value) => { // let isNotNull = value !== '' && value !== null && value !== undefined // let msg = '' // if(language == 'kr') msg = `${getChangedStr(fieldName + '을', fieldName)} 선택하세요.` // else if(language == 'en') msg = `${fieldName} is required select` // return isNotNull ? true : msg // } // } } export default valid