解决vue 格式化银行卡(信用卡)每4位一个符号隔断的问题


Posted in Javascript onSeptember 14, 2018

问题

在做银行卡输入框时有一个需求如题,这里举例用-隔断

调查

查看了很多大公司网站的银行卡输入,发现还有有很多缺陷的:
 有的是在中间删除,光标会跳到最后;
 有的是能删除掉中间隔断符的;
 等等,逻辑感觉比较混乱,或者是我不懂他们的高深设计吧。

只有支付宝的设计感觉是比较合理的,改变了只有输入框的固有方案,放图:

解决vue 格式化银行卡(信用卡)每4位一个符号隔断的问题

上面出现的显示框不可修改,能清晰看出四位隔断的格式。

不过为了实现自己项目只有一个卡号输入框的需求,只能硬着头皮研究了。

解决

将下面的方法稍作修改绑在输入框的input方法上就ok了。

改动:获取你自己的input的dom、赋值时给你自己的data赋值。

// 格式化卡??示,每4位加-
formatCardNumber (cardNum) {
 // 获取input的dom对象,这里因为用的是element ui的input,所以需要这样拿到
 const input = this.$refs.cardInput.$el.getElementsByTagName('input')[0]
 // 获取当前光标的位置
 const cursorIndex = input.selectionStart
 // 字符串中光标之前-的个数
 const lineNumOfCursorLeft = (cardNum.slice(0, cursorIndex).match(/-/g) || []).length
 // 去掉所有-的字符串
 const noLine = cardNum.replace(/-/g, '')
 // 去除格式不对的字符并重新插入-的字符串
 const newCardNum = noLine.replace(/\D+/g, '').replace(/(\d{4})/g, '$1-').replace(/-$/, '')
 // 改后字符串中原光标之前-的个数
 const newLineNumOfCursorLeft = (newCardNum.slice(0, cursorIndex).match(/-/g) || []).length
 // 光标在改后字符串中应在的位置
 const newCursorIndex = cursorIndex + newLineNumOfCursorLeft - lineNumOfCursorLeft
 // 赋新值,nextTick保证-不能手动输入或删除,只能按照规则自动填入
 this.$nextTick(() => {
  this.cardForm.creditCard = newCardNum
  // 修正光标位置,nextTick保证在渲染新值后定位光标
  this.$nextTick(() => {
   // selectionStart、selectionEnd分别代表选择一段文本时的开头和结尾位置
   input.selectionStart = newCursorIndex
   input.selectionEnd = newCursorIndex
  })
 })
}

这里就不做封装了,可自封,例:formatBankCard(dom, dataName, cardNum, breaker)

ps:

1.此方法如果想在中间删除隔断符,光标会前移一位(应该也算是正常逻辑吧)。

2.这里用的是element ui,长度限制在input上做了,这里不对长度过多赘述,自行处理。

3.这里间隔符是-,相信大家有改变间隔符的需求,只需把方法里五个位置的-改为自己的符号就好了,注意转义(如空格:将-改为\s)

下面看下sublime中有没有*.vue文件格式化插件

HTML/CSS/JS Prettify 这个插件就行, 安装后 tools->HTML/CSS/JS Prettify->set prettify preference

 在"allowed_file_extensions": ["htm", "html", "xhtml", "shtml", "xml", "svg","vue"] 加上vue就好了

总结

以上所述是小编给大家介绍的解决vue 格式化银行卡(信用卡)每4位一个符号隔断的问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
比Jquery的document.ready更快的方法
Apr 28 Javascript
JavaScript实现的日期控件具体代码
Nov 18 Javascript
JS实现往下不断流动网页背景的方法
Feb 27 Javascript
JavaScript通过代码调用Flash显示的方法
Feb 02 Javascript
Wireshark基本介绍和学习TCP三次握手
Aug 15 Javascript
基于Vue2的移动端开发环境搭建详解
Nov 03 Javascript
js仿微博动态栏功能
Feb 22 Javascript
利用原生JavaScript实现造日历轮子实例代码
May 08 Javascript
vue实现输入框自动跳转功能
May 20 Javascript
jquery实现异步文件上传ajaxfileupload.js
Oct 23 jQuery
vue 基于abstract 路由模式 实现页面内嵌的示例代码
Dec 14 Vue.js
用JS实现飞机大战小游戏
Jun 09 Javascript
Javascript 之封装(Package)
Sep 14 #Javascript
微信小程序框架wepy之动态控制类名
Sep 14 #Javascript
纯javascript前端实现base64图片下载(兼容IE10+)
Sep 14 #Javascript
react 国际化的实现代码示例
Sep 14 #Javascript
详解Vue项目中出现Loading chunk {n} failed问题的解决方法
Sep 14 #Javascript
vue3.0 CLI - 2.5 - 了解组件的三维
Sep 14 #Javascript
vue3.0 CLI - 2.4 - 新组件 Forms.vue 中学习表单
Sep 14 #Javascript
You might like
PHP 实现判断用户是否手机访问
2015/01/21 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
2020/02/15 PHP
使用JQUERY Tabs插件宿主IFRAMES
2010/01/01 Javascript
Javascript匿名函数的一种应用 代码封装
2010/06/27 Javascript
浅谈JavaScript Date日期和时间对象
2014/12/29 Javascript
浅谈重写window对象的方法
2014/12/29 Javascript
js实现数字每三位加逗号的方法
2015/02/05 Javascript
jquery中表单 多选框的一种巧妙写法
2015/09/06 Javascript
基于javascript实现浏览器滚动条快到底部时自动加载数据
2015/11/30 Javascript
基于JS实现导航条flash导航条
2016/06/17 Javascript
jQuery实现表格文本框淡入更改值后淡出效果
2016/09/27 Javascript
无法获取隐藏元素宽度和高度的解决方案
2017/03/07 Javascript
JavaScript基本语法_动力节点Java学院整理
2017/06/26 Javascript
微信小程序实现单选功能
2018/10/30 Javascript
jQuery实现简单聊天室
2020/02/08 jQuery
linux 下以二进制的方式安装 nodejs
2020/02/12 NodeJs
[41:08]TNC vs VG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
用Python程序抓取网页的HTML信息的一个小实例
2015/05/02 Python
python Socket之客户端和服务端握手详解
2017/09/18 Python
在CentOS6上安装Python2.7的解决方法
2018/01/09 Python
使用Python实现一个栈判断括号是否平衡
2018/08/23 Python
python中时间转换datetime和pd.to_datetime详析
2019/08/11 Python
python识别文字(基于tesseract)代码实例
2019/08/24 Python
解决python明明pip安装成功却找不到包的问题
2019/08/28 Python
HTML5本地存储之Web Storage详解
2016/07/04 HTML / CSS
英国时尚配饰、珠宝和服装网站:KJ Beckett
2020/01/23 全球购物
ddl,dml和dcl的含义
2016/05/08 面试题
广州盈通面试题
2015/12/05 面试题
建筑系毕业生自我鉴定
2014/01/24 职场文书
基层党员公开承诺书
2014/05/29 职场文书
中层干部考核评语
2015/01/04 职场文书
2015年教师师德师风承诺书
2015/04/28 职场文书
交通肇事罪辩护词
2015/05/21 职场文书
《好妈妈胜过好老师》:每个孩子的优秀都是有源头的
2020/01/03 职场文书
Spring Boot 排除某个类加载注入IOC的操作
2021/08/02 Java/Android
PostgreSQL并行计算算法及参数强制并行度设置方法
2022/04/06 PostgreSQL