解决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 动态将数字金额转化为中文大写金额
May 14 Javascript
Ajax同步与异步传输的示例代码
Nov 21 Javascript
js获取指定的cookie的具体实现
Feb 20 Javascript
jQuery如何获取同一个类标签的所有值(默认无法获取)
Sep 25 Javascript
JS实现点击上移下移LI行数据的方法
Aug 05 Javascript
JS实现适合于后台使用的动画折叠菜单效果
Sep 21 Javascript
深入分析Javascript事件代理
Jan 30 Javascript
Js+Ajax,Get和Post在使用上的区别小结
Jun 08 Javascript
Bootstrap轮播插件简单使用方法介绍
Jun 21 Javascript
JavaScript仿聊天室聊天记录
Dec 27 Javascript
Vue数字输入框组件示例代码详解
Jan 15 Javascript
JS函数本身的作用域实例分析
Mar 16 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设计模式中的工厂模式
2008/06/12 PHP
ThinkPHP中使用ajax接收json数据的方法
2014/12/18 PHP
PHP中预定义的6种接口介绍
2015/05/12 PHP
利用php_imagick实现复古效果的方法
2016/10/18 PHP
PHP实现防盗链的方法分析
2017/07/25 PHP
在JavaScript中实现命名空间
2006/11/23 Javascript
LBS blog sql注射漏洞[All version]-官方已有补丁
2007/08/26 Javascript
javascript hashtable实现代码
2009/10/13 Javascript
鼠标滚轮控制网页横向移动实现思路
2013/03/22 Javascript
Node.js实现的简易网页抓取功能示例
2014/12/05 Javascript
JS+CSS实现下拉列表框美化效果(3款)
2015/08/15 Javascript
使用CamanJS在Web页面上处理图像的技巧
2015/08/18 Javascript
详解axios在vue中的简单配置与使用
2017/05/10 Javascript
详细AngularJs4的图片剪裁组件的实例
2017/07/12 Javascript
JS验证码实现代码
2017/09/14 Javascript
vue.js中proxyTable 转发请求的实现方法
2018/09/20 Javascript
Bootstrap fileinput 上传新文件移除时触发服务器同步删除的配置
2018/10/08 Javascript
js实现限定范围拖拽的示例
2020/10/26 Javascript
Python使用functools模块中的partial函数生成偏函数
2016/07/02 Python
详解Python的Lambda函数与排序
2016/10/25 Python
Python编程判断这天是这一年第几天的方法示例
2017/04/18 Python
Python读取txt文件数据的方法(用于接口自动化参数化数据)
2018/06/27 Python
我们为什么要减少Python中循环的使用
2019/07/10 Python
通过字符串导入 Python 模块的方法详解
2019/10/27 Python
Python简单实现区域生长方式
2020/01/16 Python
python 已知平行四边形三个点,求第四个点的案例
2020/04/12 Python
推荐值得学习的12款python-web开发框架
2020/08/10 Python
CSS3 新增选择器的实例
2019/11/13 HTML / CSS
HMV日本官网:全球知名的音乐、DVD和电脑游戏零售巨头
2016/08/13 全球购物
吉列剃须刀英国官网:Gillette英国
2019/03/28 全球购物
介绍一下Linux中的链接
2016/06/05 面试题
校友会欢迎辞
2014/01/13 职场文书
后勤管理员岗位职责
2014/08/27 职场文书
基于HTML十秒做出淘宝页面
2021/10/24 HTML / CSS
多人盗宝《绿林侠盗》第三赛季4.5上线 跨平台实装
2022/04/03 其他游戏
python中pymysql包操作数据库方法
2022/04/19 Python