解决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 相关文章推荐
各种常用浏览器getBoundingClientRect的解析
May 21 Javascript
jquery $.ajax相关用法分享
Mar 16 Javascript
实现placeholder效果的方案汇总
Jun 11 Javascript
浅谈JavaScript中运算符的优先级
Jul 07 Javascript
解决angular的post请求后SpringMVC后台接收不到参数值问题的方法
Dec 10 Javascript
PHP+jquery+ajax实现分页
Dec 09 Javascript
完美解决node.js中使用https请求报CERT_UNTRUSTED的问题
Jan 08 Javascript
简单谈谈Javascript函数中的arguments
Feb 09 Javascript
JavaScript实现的鼠标响应颜色渐变效果完整实例
Feb 18 Javascript
Js自定义多选框效果的实例代码
Jul 05 Javascript
JavaScript实现微信号随机切换代码
Mar 09 Javascript
在Vue项目中引入腾讯验证码服务的教程
Apr 03 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数据库调用类调用实例(详细注释)
2012/07/12 PHP
php 判断字符串中是否包含html标签
2014/02/17 PHP
Zend Framework自定义Helper类相关注意事项总结
2016/03/14 PHP
全面解读PHP的Yii框架中的日志功能
2016/03/17 PHP
ext监听事件方法[初级篇]
2008/04/27 Javascript
学习并汇集javascript匿名函数
2010/11/25 Javascript
JS读取cookies信息(记录用户名)
2012/01/10 Javascript
如何正确使用javascript 来进行我们的程序开发
2014/06/23 Javascript
jQuery实现当前页面标签高亮显示的方法
2015/03/10 Javascript
js实现带缓冲效果的仿QQ面板折叠菜单代码
2015/09/06 Javascript
JS与jQuery遍历Table所有单元格内容的方法
2015/12/07 Javascript
JavaScript中使用数组方法汇总
2016/02/16 Javascript
js HTML5 Canvas绘制转盘抽奖
2020/09/13 Javascript
使用PBFunc在Powerbuilder中支付宝当面付款功能
2016/10/01 Javascript
jQuery插件FusionCharts实现的3D帕累托图效果示例【附demo源码】
2017/03/25 jQuery
React Navigation 使用中遇到的问题小结
2018/05/08 Javascript
ES6知识点整理之模块化的应用详解
2019/04/15 Javascript
使用JavaScript计算前一天和后一天的思路详解
2019/12/20 Javascript
解决vue scoped scss 无效的问题
2020/09/04 Javascript
[02:40]DOTA2英雄基础教程 先知
2013/11/29 DOTA
python创建线程示例
2014/05/06 Python
Python学习笔记(二)基础语法
2014/06/06 Python
python根据文件大小打log日志
2014/10/09 Python
Python的gevent框架的入门教程
2015/04/29 Python
Python简单连接MongoDB数据库的方法
2016/03/15 Python
浅谈pyhton学习中出现的各种问题(新手必看)
2017/05/17 Python
浅析python协程相关概念
2018/01/20 Python
Python设计模式之迭代器模式原理与用法实例分析
2019/01/10 Python
美国在线珠宝商店:SZUL
2017/02/11 全球购物
英国领先的互联网葡萄酒礼品商:Vintage Wine & Port
2019/05/24 全球购物
ProForm英国站点:健身房和健身器材网上商店
2019/06/05 全球购物
远东集团网络工程师面试题
2014/10/20 面试题
十八届三中全会宣传方案
2014/02/21 职场文书
禁烟标语大全
2014/06/11 职场文书
人事行政部各岗位职责说明书!
2019/07/15 职场文书
Ajax请求超时与网络异常处理图文详解
2021/05/23 Javascript