useValid.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. /**
  2. * 마지막 글자 받침체크
  3. */
  4. function isSingleCharacter(text){
  5. var strGa = 44032 //가
  6. var strHih = 55203 //힣
  7. let lastStrCode = text.charCodeAt(text.length-1)
  8. if(lastStrCode < strGa || lastStrCode > strHih){
  9. return false //한글이 아닌 경우
  10. }
  11. return ((lastStrCode - strGa) % 28 == 0)
  12. }
  13. /**
  14. * 를/을 필터
  15. * @param {*} text 필터 문자열
  16. * @param {*} filter 필터 조사 neun : 는/은 leul :를/을 ro: 로/으로
  17. */
  18. function filterCheck(text, filter){
  19. if(filter == '은' || filter == '는') return text + (isSingleCharacter(text) ? '는' : '은')
  20. if(filter == '을' || filter == '를') return text + (isSingleCharacter(text) ? '를' : '을')
  21. if(filter == '으로' || filter == '로') return text + (isSingleCharacter(text) ? '로' : '으로')
  22. if(filter == '이' || filter == '가') return text + (isSingleCharacter(text) ? '가' : '이')
  23. if(filter == '과' || filter == '와') return text + (isSingleCharacter(text) ? '와' : '과')
  24. }
  25. /**
  26. * @param {*} str 원본 문자열
  27. * @param {*} target 문자열 교체 대상
  28. * @param {*} filter 필터 조사 neun : 는/은 leul :를/을 ro: 로/으로
  29. * @returns
  30. */
  31. function getChangedStr(str, target){
  32. if(!useUtil.isNull(str)){
  33. let result = ''
  34. if(str.includes(target)){
  35. let targetStr = str.substr(0, target.length+1) //조사를 변경하기 위해 교체대상의 다음문자까지 가져오기.
  36. let target2Str = str.substr(0, target.length+2)
  37. let lastStr = targetStr.substr(-1)
  38. if(target2Str.substr(-2) === '으로'){
  39. lastStr = '으로'
  40. result = str.replace(target2Str, filterCheck(target, lastStr))
  41. }else{
  42. result = str.replace(targetStr, filterCheck(target, lastStr))
  43. }
  44. }else{
  45. result = str
  46. }
  47. return result
  48. }
  49. }
  50. /*
  51. * 뷰티파이 유효성 검사
  52. */
  53. let valid = {
  54. // 필수입력
  55. required(fieldName){
  56. return (value) => !!value || `${getChangedStr(fieldName+'을', fieldName)} 입력하세요.`
  57. },
  58. //파일 필수
  59. requiredFile(value){
  60. return (input) => !!value || '파일을 첨부해주세요'
  61. },
  62. // 셀렉트 필수입력
  63. requiredSelect(fieldName){
  64. return (value) => !!value || `${getChangedStr(fieldName+'을', fieldName)} 선택하세요.`
  65. },
  66. // 로그인 > 아이디 체크
  67. loginIdChk(value){
  68. return /^[a-zA-Z0-9]{5,20}$/.test(value) || false
  69. },
  70. // 로그인 > 비밀번호 체크
  71. loginPwChk(value){
  72. return /^(?=.*\d|.*[!@#$%^&*()-=_+])[A-Za-z\d!@#$%^&*()-=_+]{8,16}$/i.test(value) || false
  73. },
  74. // 아이디
  75. idRegChk(){
  76. return (value) => /^[a-zA-Z0-9]{6,20}$/.test(value) || '영문, 숫자 6자리~20자리로 입력하세요.'
  77. },
  78. // 비밀번호
  79. passWordChk(){
  80. // ^(?=.*[A-Za-z])(?=.*\d)(?=.*[\/\[`~!@#\$%^&\*|\\\'\x22;:\?\=\+_()\<\>\]])[A-Za-z\d\/\[`~!@#\$%^&\*|\\\'\x22;:\?\=\+_\(\)\<\>\]]
  81. // 영문, 특수문자, 숫자 중 두 종류는 필수로 들어가야함
  82. // return (value) => /^(?=.*\d|.*[!@#$%^&*()-=_+])[A-Za-z\d!@#$%^&*()-=_+]{8,16}$/i.test(value) || `영문자, 숫자, 특수문자 조합하여 8자리 이상 입력하세요.`
  83. // 영문, 특수문자, 숫자 중 세 종류는 필수로 들어가야함
  84. return (value) => /^(?=.*[a-zA-Z])(?=.*[!@#$%^*+=-])(?=.*[0-9]).{8,16}$/i.test(value) || `영문자, 숫자, 특수문자 조합하여 8자리 이상 입력하세요.`
  85. },
  86. // 비밀번호
  87. passWordChk2(){
  88. return (value) => /^(?=.*\d|.*[!@#$%^&*()-=_+])[A-Za-z\d!@#$%^&*()-=_+]{8,16}$/i.test(value) || `비밀번호를 확인하세요.`
  89. },
  90. // 이름
  91. nameChk(fieldName){
  92. return (value)=> /^[가-힣a-zA-Z]{2,20}$/.test(value) || `한글, 영문 2자리 ~ 20자리로 입력하세요.`
  93. },
  94. // 이메일
  95. emailChk(){
  96. 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) || '이메일을 정확하게 입력하세요.'
  97. },
  98. // 동일 비밀번호
  99. passWordConfirm(target){
  100. return (value) => (value && value === target) ||'신규 비밀번호와 동일하게 입력하세요.'
  101. },
  102. // 전화번호(휴대폰 번호)
  103. callChk(){
  104. return (value) => /^0([0-9]{1,2})-?([0-9]{3,4})-?([0-9]{4})$/.test(value) || '휴대폰 번호(전화번호)를 확인하세요.'
  105. },
  106. // 휴대폰 번호연락처
  107. phoneChk(){
  108. return (value) => /^01([0|1|6|7|8|9]?)-?([0-9]{3,4})-?([0-9]{4})$/.test(value) || '휴대폰 번호를 확인하세요.'
  109. },
  110. // min max
  111. minMaxChk(min, max){
  112. return (value) => (value.length < min || value.length > max) ? `숫자 ${min}자리 ~ ${max}자리로 입력하세요.` : true
  113. },
  114. // max
  115. maxChk(max){
  116. return (value) => value.length <= max || `${max}자 이하 입력하세요.`
  117. },
  118. // min
  119. minChk(min){
  120. return (value) => value.length >= min || `${min}자 이상 입력하세요.`
  121. },
  122. // 중복 체크 후 사용 가능한 아이디
  123. abledChk(result, field){
  124. return result === false || `사용할 수 없는 ${field}입니다.`
  125. },
  126. // 아이디 t/f
  127. idStrChk(value){
  128. return /^[a-zA-Z0-9]{6,20}$/.test(value)
  129. },
  130. // 이메일 t/f
  131. emailStrChk(value){
  132. 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)
  133. },
  134. // 연락처 t/f
  135. phoneStrChk(value){
  136. return /^01([0|1|6|7|8|9]?)-?([0-9]{3,4})-?([0-9]{4})$/.test(value)
  137. },
  138. //faq
  139. strMinMax(min, max){
  140. return (value) => (value.length < min || value.length > max) ? `한글, 영문, 특수문자, 숫자 ${min}자리 ~ ${max}자리로 입력하세요.` : true
  141. },
  142. // 로그인 > 아이디 찾기 / 비밀번호 재발급 // 이름 한글과 영문 2~20 자리
  143. loginNameChk(value){
  144. return /^[가-힣a-zA-Z]{2,10}$/.test(value) || false
  145. },
  146. // 시스템 설정 > 관리자 계정 관리 : 이메일(입력칸이 두개로 분리되어있음)
  147. seperateEmailChk(emailId, emailAddr){
  148. return this.emailStrChk(emailId + '@' + emailAddr) || '이메일을 정확하게 입력하세요.'
  149. },
  150. // 시스템 설정 > 관리자 계정 관리 : 전화번호(입력칸이 새개로 분리되어있음)
  151. seperateContactChk(contact1, contact2, contact3){
  152. return this.phoneStrChk(contact1 + '-' + contact2 + '-' + contact3 ) || '숫자 2자리 ~ 11자리로 입력하세요'
  153. },
  154. // 필수 입력값 판단
  155. requiredChk(str, fieldName){
  156. return str == '' ? `${getChangedStr(fieldName+'을', fieldName)} 입력하세요.` : false
  157. },
  158. // 이메일 에러 메시지 생성
  159. emailErrorStrForChk(emailId, emailAddr){
  160. 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
  161. },
  162. // 전화번호(휴대폰) 에러 메시지 생성
  163. contactErrorStrForChk(contact){
  164. return !(/^01([0|1|6|7|8|9]?)-?([0-9]{3,4})-?([0-9]{4})$/.test(contact)) ? '숫자 2자리 ~ 11자리로 입력하세요' : false
  165. },
  166. // 시스템 설정 > 세대 계정 관리 : 전화번호(ID) 유효성 검사 세팅
  167. phoneIdChk(){
  168. return (value) => /^01([0|1|6|7|8|9]?)-?([0-9]{3,4})-?([0-9]{4})$/.test(value) || '전화번호(ID)를 확인하세요.'
  169. },
  170. urlPattern(__VAL){
  171. const patterUrl = new RegExp(
  172. "^(https?:\\/\\/)" + // 프로토콜
  173. "((([a-zA-Z\\d]([a-zA-Z\\d-]*[a-zA-Z\\d])*))\\.)*" + // 서브도메인
  174. "([a-zA-Z\\d]([a-zA-Z\\d-]*[a-zA-Z\\d])*\\.[a-zA-Z]{2,})" + // 도메인
  175. "(\\:\\d+)?(\\/[-a-zA-Z\\d%@_.~+&:]*)*" + // 경로
  176. "(\\?[;&a-zA-Z\\d%@_.,~+&:=-]*)?" + // 쿼리 문자열
  177. "(\\#[-a-zA-Z\\d_]*)?$" // 앵커
  178. );
  179. return patterUrl.text(__VAL);
  180. }
  181. // /**
  182. // * P5G 추가 validation
  183. // * 생성 시 p5g를 앞에 붙여 생성[p5gRequired]
  184. // */
  185. // p5gRequired(fieldName){
  186. // let msg = ''
  187. // const language = useLangStore().getLang
  188. // if(language == 'kr') msg = `${getChangedStr(fieldName+'을', fieldName)} 입력하세요.`
  189. // else if(language == 'en') msg = `${fieldName} is required`
  190. // return (value) => !!value || msg
  191. // },
  192. // p5gNumCheck(num, type) {
  193. // let checkNum = num.replace(/[^0-9]/g, '')
  194. // if(type === 'otp') {
  195. // // OTP키값
  196. // if (num !== checkNum) {
  197. // num = checkNum
  198. // } else if(num.length > 6) {
  199. // num = num.slice(0, 6)
  200. // }
  201. // } else {
  202. // // 연락처
  203. // let phoneNum = checkNum
  204. // if(phoneNum > 11) {
  205. // phoneNum = phoneNum.slice(0, 11)
  206. // }
  207. // // 입력한 숫자를 전화번호 형식으로 변환
  208. // if (phoneNum.length > 7) {
  209. // // 3자리-4자리-4자리 형식
  210. // phoneNum = phoneNum.replace(/(\d{3})(\d{4})(\d{4})/, '$1-$2-$3');
  211. // } else if (phoneNum.length > 3) {
  212. // // 3자리-4자리 형식
  213. // phoneNum = phoneNum.replace(/(\d{3})(\d{4})?/, '$1-$2');
  214. // }
  215. // // 변환된 값을 다시 input에 설정
  216. // num = phoneNum
  217. // }
  218. // return num
  219. // },
  220. // /**
  221. // * 필수 선택 (0값도 있는값으로 판단)
  222. // */
  223. // p5gRequiredSelect(fieldName) {
  224. // const language = useLangStore().getLang
  225. // return (value) => {
  226. // let isNotNull = value !== '' && value !== null && value !== undefined
  227. // let msg = ''
  228. // if(language == 'kr') msg = `${getChangedStr(fieldName + '을', fieldName)} 선택하세요.`
  229. // else if(language == 'en') msg = `${fieldName} is required select`
  230. // return isNotNull ? true : msg
  231. // }
  232. // },
  233. // /**
  234. // * 필수 선택 (0값도 있는값으로 판단)
  235. // */
  236. // p5gRequiredSelect(fieldName) {
  237. // const language = useLangStore().getLang
  238. // return (value) => {
  239. // let isNotNull = value !== '' && value !== null && value !== undefined
  240. // let msg = ''
  241. // if(language == 'kr') msg = `${getChangedStr(fieldName + '을', fieldName)} 선택하세요.`
  242. // else if(language == 'en') msg = `${fieldName} is required select`
  243. // return isNotNull ? true : msg
  244. // }
  245. // }
  246. }
  247. export default valid