Skip to content

Commit

Permalink
card number mask updated for all card types include amex and diner's …
Browse files Browse the repository at this point in the history
…club cards
  • Loading branch information
muhammed committed Oct 29, 2019
1 parent 48db822 commit 24ff9d1
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 21 deletions.
5 changes: 0 additions & 5 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 1 addition & 2 deletions package.json
Expand Up @@ -10,8 +10,7 @@
},
"dependencies": {
"core-js": "^3.3.2",
"vue": "^2.6.10",
"vue-the-mask": "^0.11.1"
"vue": "^2.6.10"
},
"devDependencies": {
"@vue/cli-plugin-babel": "^4.0.0",
Expand Down
28 changes: 14 additions & 14 deletions src/components/CardForm.vue
Expand Up @@ -24,7 +24,7 @@
@blur="blurCardNumber"
class="card-input__input"
:value="cardNumberModel"
maxlength="19"
:maxlength="cardNumberMaxLength"
data-card-field
autocomplete="off"
/>
Expand Down Expand Up @@ -103,12 +103,10 @@
</template>

<script>
import { mask } from 'vue-the-mask'
import Card from '@/components/Card'
export default {
name: 'CardForm',
directives: {
'mask': mask,
'number-only': {
bind (el) {
function checkValue (event) {
Expand Down Expand Up @@ -162,7 +160,8 @@ export default {
cardCvv: 'cardCvv'
},
isCardNumberMasked: true,
mainCardNumber: this.cardNumber
mainCardNumber: this.cardNumber,
cardNumberMaxLength: 19
}
},
mounted () {
Expand Down Expand Up @@ -215,18 +214,19 @@ export default {
this.$emit('update:cardName', this.cardNameModel)
},
changeNumber (e) {
// this.cardNumberModel = e.target.value.replace(/[^0-9]/g, '').replace(/\W/gi, '').replace(/(.{4})/g, '$1 ').trim()
this.cardNumberModel = e.target.value
let formattedCardNumber = this.cardNumberModel.replace(/[^\d]/g, '')
formattedCardNumber = formattedCardNumber.substring(0, 16)
let cardNumberSections = formattedCardNumber.match(/\d{1,4}/g)
if (cardNumberSections !== null) {
formattedCardNumber = cardNumberSections.join(' ')
let value = this.cardNumberModel.replace(/\D/g, '')
// american express, 15 digits
if ((/^3[47]\d{0,13}$/).test(value)) {
this.cardNumberModel = value.replace(/(\d{4})/, '$1 ').replace(/(\d{4}) (\d{6})/, '$1 $2 ')
this.cardNumberMaxLength = 17
} else if ((/^3(?:0[0-5]|[68]\d)\d{0,11}$/).test(value)) { // diner's club, 14 digits
this.cardNumberModel = value.replace(/(\d{4})/, '$1 ').replace(/(\d{4}) (\d{6})/, '$1 $2 ')
this.cardNumberMaxLength = 16
} else if ((/^\d{0,16}$/).test(value)) { // regular cc number, 16 digits
this.cardNumberModel = value.replace(/(\d{4})/, '$1 ').replace(/(\d{4}) (\d{4})/, '$1 $2 ').replace(/(\d{4}) (\d{4}) (\d{4})/, '$1 $2 $3 ')
this.cardNumberMaxLength = 19
}
if (this.cardNumberModel !== formattedCardNumber) {
this.cardNumberModel = formattedCardNumber
}
e.preventDefault()
this.$emit('update:cardNumber', this.cardNumberModel)
},
changeMonth () {
Expand Down

0 comments on commit 24ff9d1

Please sign in to comment.