解决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 相关文章推荐
解决jquery submit()提交表单提示:f[s] is not a function
Jan 23 Javascript
jquery让返回的内容显示在特定div里(代码少而精悍)
Jun 23 Javascript
JavaScript中property和attribute的区别详细介绍
Mar 03 Javascript
举例讲解jQuery中可见性过滤选择器的使用
Apr 18 Javascript
jQuery插件AjaxFileUpload实现ajax文件上传
May 05 Javascript
jQuery Mobile操作HTML5的常用函数总结
May 17 Javascript
jquery之别踩白块游戏的简单实现
Jul 25 Javascript
微信小程序中的onLoad详解及简单实例
Apr 05 Javascript
微信小程序自定义单项选择器样式
Jul 25 Javascript
JavaScript Reflect Metadata实现详解
Dec 12 Javascript
Jquery+AJAX实现无刷新上传并重命名文件操作示例【PHP后台接收】
May 29 jQuery
微信小程序开发(一):服务器获取数据列表渲染操作示例
Jun 01 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执行时间问题
2011/07/17 PHP
php在服务器执行exec命令失败的解决方法
2012/03/03 PHP
php实现的css文件背景图片下载器代码
2014/11/11 PHP
php文件夹的创建与删除方法
2015/01/24 PHP
PHP实现WebService的简单示例和实现步骤
2015/03/27 PHP
php中define用法实例
2015/07/30 PHP
thinkPHP中验证码的简单实现方法
2016/12/05 PHP
PHP获取ttf格式文件字体名的方法示例
2019/03/06 PHP
PHP如何防止用户重复提交表单
2020/12/09 PHP
用Move.js配合创建CSS3动画的入门指引
2015/07/22 Javascript
js操作数组函数实例小结
2015/12/10 Javascript
AngularJS向后端ASP.NET API控制器上传文件
2016/02/03 Javascript
Javascript缓存API
2016/06/14 Javascript
jQuery实现查找最近父节点的方法
2016/06/23 Javascript
Bootstrap实现登录校验表单(带验证码)
2016/06/23 Javascript
适用于手机端的jQuery图片滑块动画
2016/12/09 Javascript
react性能优化达到最大化的方法 immutable.js使用的必要性
2017/03/09 Javascript
详解Windows下安装Nodejs步骤
2017/05/18 NodeJs
Node.js+ES6+dropload.js实现移动端下拉加载实例
2017/06/01 Javascript
vue.js+Echarts开发图表放大缩小功能实例
2017/06/09 Javascript
js断点调试经验分享
2017/12/08 Javascript
微信小程序自定义导航栏实例代码
2019/04/05 Javascript
JavaScript canvas动画实现时钟效果
2020/02/10 Javascript
Python多进程multiprocessing.Pool类详解
2018/04/27 Python
解决Spyder中图片显示太小的问题
2018/04/27 Python
numpy添加新的维度:newaxis的方法
2018/08/02 Python
Python GUI库PyQt5图形和特效样式QSS介绍
2020/02/25 Python
html5中的input新属性range使用记录
2014/09/05 HTML / CSS
利用Node实现HTML5离线存储的方法
2020/10/16 HTML / CSS
电气自动化大学生求职信
2013/10/16 职场文书
质检员的岗位职责
2013/11/15 职场文书
新闻学专业求职信
2014/07/28 职场文书
我为党旗添光彩演讲稿
2014/09/13 职场文书
狼牙山五壮士观后感
2015/06/09 职场文书
廉洁自律证明
2015/06/24 职场文书
银行客户经理培训心得体会
2016/01/09 职场文书