解决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下:float属性会影响offsetTop的取值
Dec 22 Javascript
CLASS_CONFUSION JS混淆 全源码
Dec 12 Javascript
jQuery中json对象的复制方式介绍(数组及对象)
Jun 08 Javascript
JavaScript也谈内存优化
Jun 06 Javascript
js类定义函数时用prototype与不用的区别示例介绍
Jun 10 Javascript
js实现横向伸展开的二级导航菜单代码
Aug 28 Javascript
关于JavaScript和jQuery的类型判断详解
Oct 08 Javascript
解决vue 中 echart 在子组件中只显示一次的问题
Aug 07 Javascript
如何自动化部署项目?折腾服务器之旅~
Apr 16 Javascript
深入浅析nuxt.js基于ssh的vue通用框架
May 21 Javascript
小程序实现短信登录倒计时
Jul 12 Javascript
antd-mobile ListView长列表的数据更新遇到的坑
Apr 08 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/07/17 PHP
深入apache配置文件httpd.conf的部分参数说明
2013/06/28 PHP
php随机显示指定文件夹下图片的方法
2015/07/13 PHP
PHP 传输会话curl函数的实例详解
2017/09/12 PHP
Jquery下判断Id是否存在的代码
2011/01/06 Javascript
xmlhttp缓存清除的2种解决方法
2013/12/13 Javascript
JS图片无缝、平滑滚动代码
2014/03/11 Javascript
封装属于自己的JS组件
2016/01/27 Javascript
JS上传组件FileUpload自定义模板的使用方法
2016/05/10 Javascript
AngularJS实现表单验证功能详解
2017/10/12 Javascript
vue iView 上传组件之手动上传功能
2018/03/16 Javascript
微信小程序仿微信运动步数排行(交互)
2018/07/13 Javascript
Vue 开发必须知道的36个技巧(小结)
2019/10/09 Javascript
Vue通过配置WebSocket并实现群聊功能
2019/12/31 Javascript
JavaScript forEach中return失效问题解决方案
2020/06/01 Javascript
JavaScript实现世界各地时间显示
2020/09/07 Javascript
Python编程中用close()方法关闭文件的教程
2015/05/24 Python
node.js获取参数的常用方法(总结)
2017/05/29 Python
Python实现的下载网页源码功能示例
2017/06/13 Python
完美解决Python 2.7不能正常使用pip install的问题
2018/06/12 Python
python 统计一个列表当中的每一个元素出现了多少次的方法
2018/11/14 Python
Python3爬虫之自动查询天气并实现语音播报
2019/02/21 Python
python pygame实现方向键控制小球
2019/05/17 Python
Windows平台Python编程必会模块之pywin32介绍
2019/10/01 Python
PyCharm常用配置和常用插件(小结)
2021/02/06 Python
使用Python制作一盏 3D 花灯喜迎元宵佳节
2021/02/26 Python
Html5新特性用canvas标签画多条直线附效果截图
2014/06/30 HTML / CSS
ECCO爱步加拿大官网:北欧丹麦鞋履及皮具品牌
2017/07/08 全球购物
英国第一独立滑雪板商店:The Snowboard Asylum
2020/01/16 全球购物
北大青鸟学生求职信
2013/09/24 职场文书
单方离婚协议书范本(2014版)
2014/09/30 职场文书
2014年大学班级工作总结
2014/11/14 职场文书
家长对学校的意见和建议
2015/06/03 职场文书
爱国主义影片观后感
2015/06/18 职场文书
党纪处分决定书
2015/06/24 职场文书
高考满分作文赏析(2篇)
2019/08/12 职场文书