728x90
<template>
<div>
<input type="text" v-model.trim="cardNumber" @input="handleInput"/>
</div>
</template>
<script>
export default {
data() {
return {
cardNumber: ''
}
},
methods: {
handleInput(event) {
// first parmas: 사용자가 타입할때 들어오는 값
// second parmas: 타입 시점의 cardNumber 전체 값
this.cardNumber = this.cardFomatter(event.data, event.target.value);
},
cardFormatter(value, cardNumber) {
if (cardNumber.length > 19) reutrn;
let result = '';
// 0-9까지의 숫자와 하이픈(-) 값 체크
let check01 = /[^0-9-]/g;
// 하이픈 값 체크
let check02 = /[-]/g;
if (check01.test(cardNumber) || check02.test(value)) {
result = cardNumber.slice(0, -1);
} else {
// 0000-0000-0000-0000 형식이 되도록 숫자 4자리가 들어오면
// 하이픈을 자동으로 넣어준다
result = cardNumber.match(/[0-9●]{1,4}/g)?.join('-') || cardNumber;
}
return reuslt;
}
}
}
</script>
728x90
'FRONTEND > Vue.js' 카테고리의 다른 글
[Vue] IOS의 setTimeout 이슈 (feat. $nextTick) (0) | 2023.05.09 |
---|---|
[Vue] vuelidate를 사용하여 폼 검증하기 (Vue2) (0) | 2023.04.13 |
[ERROR] NavigationDuplicated: Avoided redundant navigation to current location (0) | 2023.03.17 |
[Vue] 조건부 렌더링 v-if 와 v-show (0) | 2021.03.13 |
[Vue] Vue.js 소개 (1) | 2020.09.20 |