解决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 相关文章推荐
javascript encodeURI和encodeURIComponent的比较
Apr 03 Javascript
如何书写高质量jQuery代码(使用jquery性能问题)
Jun 30 Javascript
JavaScript 中有关数组对象的方法(详解)
Aug 15 Javascript
详解基于node的前端项目编译时内存溢出问题
Aug 01 Javascript
javascript流程控制语句集合
Sep 18 Javascript
微信小程序页面生命周期详解
Jan 31 Javascript
详解webpack自定义loader初探
Aug 29 Javascript
深入理解Vue 的钩子函数
Sep 05 Javascript
jQuery简单实现根据日期计算星期几的方法
Jan 09 jQuery
微信小程序公用参数与公用方法用法示例
Jan 09 Javascript
JS代码屏蔽F12,右键,粘贴,复制,剪切,选中,操作实例
Sep 17 Javascript
js脚本中执行java后台代码方法解析
Oct 11 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 最大运行时间 max_execution_time修改方法
2010/03/08 PHP
php下保存远程图片到本地的办法
2010/08/08 PHP
优化php效率,提高php性能的一些方法
2011/03/24 PHP
php设计模式 Visitor 访问者模式
2011/06/28 PHP
php实现base64图片上传方式实例代码
2017/02/22 PHP
phpmyadmin在宝塔面板里进不去的解决方案
2020/07/06 PHP
JQuery 学习笔记 选择器之二
2009/07/23 Javascript
Zero Clipboard js+swf实现的复制功能使用方法
2010/03/07 Javascript
jQuery学习笔记之jQuery的事件
2010/12/22 Javascript
基于jquery DOM写的类似微博发布的效果
2012/10/20 Javascript
javascript模拟post提交隐藏地址栏的参数
2014/09/03 Javascript
原生JS实现LOADING效果
2015/03/16 Javascript
jQuery插件MixItUp实现动画过滤和排序
2015/04/12 Javascript
jquery中val()方法是从最后一个选项往前读取的
2015/09/06 Javascript
基于JavaScript实现仿京东图片轮播效果
2015/11/06 Javascript
BootStrap使用file-input插件上传图片的方法
2016/09/05 Javascript
AngularJS过滤器filter用法实例分析
2016/11/04 Javascript
Jquery+Ajax+xml实现中国地区选择三级联动菜单效果(推荐)
2017/06/09 jQuery
解决vue2中使用axios http请求出现的问题
2018/03/05 Javascript
Vue.js自定义指令学习使用详解
2019/10/19 Javascript
Vue左滑组件slider使用详解
2020/08/21 Javascript
详解React的回调渲染模式
2020/09/10 Javascript
[03:16]DOTA2完美大师赛小组赛精彩集锦
2017/11/22 DOTA
Python3 模块、包调用&路径详解
2017/10/25 Python
使用apidoc管理RESTful风格Flask项目接口文档方法
2018/02/07 Python
Python二维码生成识别实例详解
2019/07/16 Python
keras 回调函数Callbacks 断点ModelCheckpoint教程
2020/06/18 Python
Python venv虚拟环境配置过程解析
2020/07/08 Python
草莓网英国官网:Strawberrynet UK
2017/02/12 全球购物
台湾菁英交友:结识黄金单身的台湾人
2018/01/22 全球购物
如何启动时不需输入用户名与密码
2014/05/09 面试题
专科应届生求职信
2013/11/24 职场文书
难以忽视的真相观后感
2015/06/05 职场文书
工作表现证明
2015/06/15 职场文书
导游词之神仙居景区
2019/11/15 职场文书
使用PostGIS完成两点间的河流轨迹及流经长度的计算(推荐)
2022/01/18 PostgreSQL