解决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 相关文章推荐
取得一定长度的内容,处理中文
Dec 20 Javascript
浅谈JSON和JSONP区别及jQuery的ajax jsonp的使用
Nov 23 Javascript
jQuery position() 函数详解以及jQuery中position函数的应用
Dec 14 Javascript
javascript简单实现跟随滚动条漂浮的返回顶部按钮效果
Aug 19 Javascript
实例解析angularjs的filter过滤器
Dec 14 Javascript
touch.js 拖动、缩放、旋转 (鼠标手势)功能代码
Feb 04 Javascript
TypeScript入门-基本数据类型
Mar 28 Javascript
vue脚手架中配置Sass的方法
Jan 04 Javascript
浅谈在react中如何实现扫码枪输入
Jul 04 Javascript
微信小程序实现分享商品海报功能
Sep 30 Javascript
js通过canvas生成图片缩略图
Oct 02 Javascript
Html5生成验证码的示例代码
May 10 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/10/09 PHP
基于PHP微信红包的算法探讨
2016/07/21 PHP
Redis使用Eval多个键值自增的操作实例
2016/11/04 PHP
用jscript实现新建和保存一个word文档
2007/06/15 Javascript
javascript的键盘控制事件说明
2008/04/15 Javascript
JQuery.uploadify 上传文件插件的使用详解 for ASP.NET
2010/01/22 Javascript
JQuery防止退格键网页后退的实现代码
2012/03/23 Javascript
jquery常用操作小结
2014/07/21 Javascript
深入理解Javascript中的valueOf与toString
2017/01/04 Javascript
快速理解 JavaScript 中的 LHS 和 RHS 查询的用法
2017/08/24 Javascript
原生JS写Ajax的请求函数功能
2017/12/22 Javascript
jQuery实现的点击标题文字切换字体效果示例【测试可用】
2018/04/26 jQuery
Vue弹出菜单功能的实现代码
2018/09/12 Javascript
小程序实现上下移动切换位置
2019/09/23 Javascript
jQuery插件simplePagination的使用方法示例
2020/04/28 jQuery
react-router-dom 嵌套路由的实现
2020/05/02 Javascript
详解JavaScript数据类型和判断方法
2020/09/04 Javascript
JS时间戳与日期格式互相转换的简单方法示例
2021/01/30 Javascript
[00:27]DOTA2荣耀之路2:Patience from zhou!
2018/05/24 DOTA
python中文编码问题小结
2014/09/28 Python
python计算auc指标实例
2017/07/13 Python
Python无损音乐搜索引擎实现代码
2018/02/02 Python
pyqt5 实现工具栏文字图片同时显示
2019/06/13 Python
解决django 新增加用户信息出现错误的问题
2019/07/28 Python
python函数中将变量名转换成字符串实例
2020/05/11 Python
Django mysqlclient安装和使用详解
2020/09/17 Python
PyCharm上安装Package的实现(以pandas为例)
2020/09/18 Python
详解Open Folder as PyCharm Project怎么添加的方法
2020/12/29 Python
CSS去掉A标签(链接)虚线框的方法
2014/04/01 HTML / CSS
计算机应用专业学生的自我评价分享
2013/11/03 职场文书
大学毕业生通用自我评价
2014/01/05 职场文书
机械电子工程专业求职信
2014/06/22 职场文书
个人查摆问题整改措施
2014/10/04 职场文书
2015年公务员转正工作总结
2015/04/24 职场文书
2015暑期工社会实践报告
2015/07/13 职场文书
python 实现德洛内三角剖分的操作
2021/04/22 Python