解决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 相关文章推荐
IE Firefox 使用自定义标签的区别
Oct 15 Javascript
jQuery实现响应浏览器缩放大小并改变背景颜色
Oct 31 Javascript
js实现图片切换(动画版)
Dec 25 Javascript
JS正则匹配中文的方法示例
Jan 06 Javascript
几种tab切换详解
Feb 03 Javascript
ReactJs设置css样式的方法
Jun 08 Javascript
基于复选框demo(分享)
Sep 27 Javascript
JavaScript从原型到原型链深入理解
Jun 03 Javascript
移动端底部导航固定配合vue-router实现组件切换功能
Jun 13 Javascript
解决layer图标icon不加载的问题
Sep 04 Javascript
vue cli3 调用百度翻译API翻译页面的实现示例
Sep 13 Javascript
vue配置nprogress实现页面顶部进度条
Sep 21 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入门学习笔记之一
2010/10/12 PHP
PHP链接MySQL的常用扩展函数
2014/10/23 PHP
通过PHP自带的服务器来查看正则匹配结果的方法
2015/12/24 PHP
详解HTTP Cookie状态管理机制
2016/01/14 PHP
完美解决phpdoc导出文档中@package的warning及Error的错误
2016/05/17 PHP
PHP中Socket连接及读写数据超时问题分析
2016/07/19 PHP
PHP之认识(二)关于Traits的用法详解
2019/04/11 PHP
Javascript与flash交互通信基础教程
2008/08/07 Javascript
ExtJS 2.2.1的grid控件在ie6中的显示问题
2009/05/04 Javascript
真正的JQuery.ajax传递中文参数的解决方法
2011/05/28 Javascript
javascript实现状态栏中文字动态显示的方法
2015/10/20 Javascript
在WordPress中加入Google搜索功能的简单步骤讲解
2016/01/04 Javascript
seajs学习之模块的依赖加载及模块API的导出
2016/10/20 Javascript
jQuery中Nicescroll滚动条插件的用法
2016/11/10 Javascript
基于Bootstrap模态对话框只加载一次 remote 数据的解决方法
2017/07/09 Javascript
layui table 获取分页 limit的方法
2019/09/20 Javascript
Javascript地址引用代码实例解析
2020/02/25 Javascript
JS组件库AlloyTouch实现图片轮播过程解析
2020/05/29 Javascript
[47:48]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第三局
2016/02/28 DOTA
[03:23:49]2016.12.17日完美“圣”典全回顾
2016/12/19 DOTA
[02:27]2018DOTA2亚洲邀请赛赛前采访-OpTic
2018/04/03 DOTA
Python操作RabbitMQ服务器实现消息队列的路由功能
2016/06/29 Python
Django框架视图层URL映射与反向解析实例分析
2019/07/29 Python
Spring Cloud Feign高级应用实例详解
2019/12/10 Python
python判断正负数方式
2020/06/03 Python
matplotlib 画双轴子图无法显示x轴的解决方法
2020/07/27 Python
python 贪心算法的实现
2020/09/18 Python
CSS3的calc()做响应模式布局的实现方法
2017/09/06 HTML / CSS
html5-websocket基于远程方法调用的数据交互实现
2012/12/04 HTML / CSS
美国在线鞋类零售商:LifeStride
2019/06/09 全球购物
巴西儿童时尚购物网站:Dinda
2019/08/14 全球购物
报关简历自我评价怎么写
2013/09/19 职场文书
大学专科生推荐信范文
2013/11/23 职场文书
入党积极分子学习两会心得体会范文
2014/03/17 职场文书
党员先进性教育整改措施
2014/09/18 职场文书
解决Goland 同一个package中函数互相调用的问题
2021/05/06 Golang