vue手机号按344分隔,银行卡号每4位空格分隔

实现效果:

1. 手机号输入/粘贴时,不允许输入数字外的其它字符,按344分隔,最大输入11位数字

2. 银行卡号输入/粘贴时,不允许输入数字外的其它字符,每四位用空格分隔

代码:

<template>
    <div class="form">
        <p>
            手机号:
            <input v-model="mobile" type="tel" ref="mobile" maxlength="13" @keyup="inputMobile" @paste="inputMobile" />
        </p>
        <p>
            银行卡号:
            <input v-model="card" type="text" @keyup="inputCard" @paste="inputCard" />
        </p>
    </div>
</template>

js:

 1 <script>
 2     export default {
 3         data() {
 4             return {
 5                 mobile: ‘‘,
 6                 card: ‘‘
 7             }
 8         },
 9         methods: {
10             inputMobile() {
11                 let value = this.mobile.replace(/\D/g, ‘‘).substr(0, 11) // 不允许输入非数字字符,超过11位数字截取前11位
12                 let len = value.length
13                 if (len > 3 && len < 8) {
14                     value = value.replace(/^(\d{3})/g, ‘$1 ‘)
15                 } else if (len >= 8) {
16                     value = value.replace(/^(\d{3})(\d{4})/g, ‘$1 $2 ‘)
17                 }
18                 this.mobile = value
19             },
20             inputCard() {
21                 this.card = this.card.replace(/\D/g, ‘‘) // 不允许输入非数字字符
22                 this.card = this.card.replace(/(\d{4})(?=\d)/g, ‘$1 ‘) // 4位一组,非获取匹配最后一组数字,避免删除到空格时会马上自动补齐
23             }
24         }
25     }
26 </script>

上述方案即可实现基本效果,但如果从中间开始删除或添加内容时,光标会自动跑到最后,如下:

若想光标留在删除/添加内容位置,需要设置光标位置:

修改js如下:

 1 <script>
 2     export default {
 3         data () {
 4             return {
 5                 mobile: ‘‘,
 6                 card: ‘‘
 7             }
 8         },
 9         methods: {
10             inputMobile (e) {
11                 this.formatMobile(e)
12                 this.mobile = this.$refs.mobile.value
13             },
14             formatMobile (e) {
15                 let val = this.$refs.mobile.value // 不可直接用this.mobile,第一方便提取该方法降低代码耦合度,第二直接用this.mobile,在输入汉字时按下shift按键会导致无法再输入和删除内容
16                 let selStart = this.$refs.mobile.selectionStart // 选中区域左边界位置
17                 let mobileLen = val.length
18                 let value = this.getValue(e, val).substr(0, 11) // 获取输入/粘贴内容,并截取前11位
19                 let len = value.length
20                 if (len > 3 && len < 8) {
21                     value = value.replace(/^(\d{3})/g, ‘$1 ‘)
22                 } else if (len >= 8) {
23                     value = value.replace(/^(\d{3})(\d{4})/g, ‘$1 $2 ‘)
24                 }
25                 this.$refs.mobile.value = value
26                 if (selStart !== mobileLen) {
27                     if (selStart === 3) {
28                         selStart++
29                     }
30                     // 设置光标位置
31                     this.$refs.mobile.selectionStart = this.$refs.mobile.selectionEnd = selStart
32                 }
33             },
34             getValue(e, val) {
35                 let value = ‘‘
36                 if (e.type === ‘keyup‘) {
37                     value = val.replace(/\D/g, ‘‘)
38                 } else if (e.type === ‘paste‘) {
39                     // window.clipboardData:IE浏览器获取剪贴板数据对象
40                     // event.clipboardData:Chrome, Firefox, Safari获取剪贴板数据对象
41                     let clipboardData = event.clipboardData || window.clipboardData;
42                     value = clipboardData.getData(‘Text‘); // 获取剪贴板text格式的数据
43                     value = value.replace(/\D/g, ‘‘)
44                 }
45                 return value
46             }
47         }
48     }
49 </script>

未实现:

不允许粘贴非数字内容到输入框还未实现,改为了提交时校验,如果有比较好的解决方案望大家提出

原文地址:https://www.cnblogs.com/qdwyy/p/10854014.html

时间: 2024-10-11 19:42:15

vue手机号按344分隔,银行卡号每4位空格分隔的相关文章

空格分隔输出

描述 读入一个字符,一个整数,一个单精度浮点数,一个双精度浮点数,然后按顺序输出它们,并且要求在他们之间用一个空格分隔.输出浮点数时保留6位小数. 输入共有四行:第一行是一个字符:第二行是一个整数:第三行是一个单精度浮点数:第四行是一个双精度浮点数.输出输出字符.整数.单精度浮点数和双精度浮点数,之间用空格分隔.样例输入 a 12 2.3 3.2 样例输出 a 12 2.300000 3.200000 来源习题(2-4) 源代码: #include<stdio.h> int main() {

c# 以空格分隔字符串

经常我们需要把一个字符串以空格分隔开,但是如果原字符串中间有多个字符串就是出现问题,只包含一个空格的字符串会出现,为了避免出现此情况,我们可用下面的方法 String tmp = "hello world    haha";tmp = System.Text.RegularExpressions.Regex.Replace(tmp, @"\s+", ",");  //替换字符必须在原字符串中没有出现string[] arr = tmp.Split

06:空格分隔输出

#include<iostream> #include<cstdio> #include<cstdlib> #include<cmath> #include<algorithm> #include<cstring> using namespace std; int main() {char a; int b;float c; double d; cin>>a; cin>>b; cin>>c; cin

C#如何分割多个空格分隔的字符串?

using System; using System.Text; using System.Text.RegularExpressions; namespace test { class Program { public static void Main(string[] args) { string pp="1063792.4 2764405.825 5.464413E-05 -1.780467E-04"; string[] mm=Regex.Split(pp,"\\s+&

js实现卡号每四位空格分隔

window.onload =function() { document.getElementById("input_num").oninput =function() { this.value =this.value.replace(/\s/g,'').replace(/\D/g,'').replace(/(\d{4})(?=\d)/g,"$1 ");; }; };

mysql rsplit() 根据最后一个空格分隔

原来 字符 为 Abbeville (AL) USABB trim(REVERSE(SUBSTRING(REVERSE('Abbeville (AL) USABB'),LOCATE(' ',REVERSE('Abbeville (AL) USABB') ),LENGTH('Abbeville (AL) USABB') ) ) ) //结果 为 Abbeville (AL) 原文地址:https://www.cnblogs.com/angdh/p/11275968.html

前缀表达式-怎样用空格分隔一个字符串

1 #include<iostream> 2 #include<cstdlib> 3 #include<stack> 4 #include<string> 5 #include<sstream> 6 using namespace std; 7 stack<double>s; 8 char a[100][20]; 9 int main(){ 10 string str; 11 getline(cin, str); 12 istring

Java 字符串工具类持续更新中非原创

1 import java.util.ArrayList; 2 import java.util.List; 3 4 /** 5 * 字符串相关的工具类 6 * 7 * @author Fsx 8 * 9 */ 10 public class StringUtil { 11 /** 12 * 判断一个字符串是否为空或等于空字符串 13 * 14 * @param s 15 * 字符串 16 * @return 是否为空或空字符串 17 */ 18 public static final bool

CSS3 Transform属性详解

今天我们一起来学习有关于CSS3制作动画的几个属性:变形(transform).转换(transition)和动画(animation)等更高级的CSS3技术.本文主要介绍的是这三个属性之中的第一个──变形transform. Transform字面上就是变形,改变的意思.在CSS3中transform主要包括以下几种:旋转rotate.扭曲skew.缩放scale和移动translate以及矩阵变形matrix.下面我们一起来看看CSS3中transform的旋转rotate.扭曲skew.缩