javascript – 自动格式化信用卡号作为用户类型输入

前端之家收集整理的这篇文章主要介绍了javascript – 自动格式化信用卡号作为用户类型输入前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我想使用JavaScript创建一个输入,自动使用正确的信用卡格式对其进行格式化.

我想要的是?

>输入应格式化为4的组输入.如果我输入1234567890123456,则应将其格式化为1234 5678 9012 3456
>最大长度应为16位.因此,如果我输入1234567890123456789,则应将其格式化为“1234 5678 9012 3456”
>键入时应格式化.因此,如果我键入“123456”,则应将其格式化为“1234 56”
>应忽略无效字符.所以,如果我输入564adsd299 474,它应格式化为“5642 9947 4”

输入还应该尊重文本框的传统行为. (|这里类似于光标,例如

如果我在输入时输入8:

> 1234 5 | 67它应该转到1234 58 | 67
> 1234 |,应该转到1234 8
> 1234 | 567它应该转到1234 8567
> 1234 | 5679它应该转到1234 8567 9

如果我在输入时删除了前一个字符:

> 1234 5 | 67它应该转向1234 | 67
> 1234 | 567它应该转向1234 | 567
> 1234 | 567应该转向123 | 5 67

可能会有更多的测试用例.

基本上它应该与Google Play商店中使用的“输入卡片详细信息”完全相同.要查找此页面:在Android设备上打开Play商店>点击帐户>付款方式>添加信用卡或借记卡.此屏幕也可在此处找到:https://play.google.com/store/account

到目前为止我有什么?

这是我到目前为止:

  1. var txtCardNumber = document.querySelector("#txtCardNumber");
  2. txtCardNumber.addEventListener("input",onChangeTxtCardNumber);
  3. function onChangeTxtCardNumber(e) {
  4. var cardNumber = txtCardNumber.value;
  5. // Do not allow users to write invalid characters
  6. var formattedCardNumber = cardNumber.replace(/[^\d]/g,"");
  7. formattedCardNumber = formattedCardNumber.substring(0,16);
  8. // Split the card number is groups of 4
  9. var cardNumberSections = formattedCardNumber.match(/\d{1,4}/g);
  10. if (cardNumberSections !== null) {
  11. formattedCardNumber = cardNumberSections.join(' ');
  12. }
  13. console.log("'"+ cardNumber + "' to '" + formattedCardNumber + "'");
  14. // If the formmattedCardNumber is different to what is shown,change the value
  15. if (cardNumber !== formattedCardNumber) {
  16. txtCardNumber.value = formattedCardNumber;
  17. }
  18. }

以上格式完美地标记了信用卡号,但问题在我想要编辑时开始.

但是,由于光标只是跳到最后,因此上面不满足测试用例5.

我怎样才能实现这种行为.我知道谷歌已经做到了这一点.

(请不要使用PayPal答案)

编辑:请注意,我正在寻找本机JavaScript解决方案,但可以随意建议插件作为注释.例外是几乎没有依赖的库,所以可以只复制源代码.

我还在上面的代码删除了jQuery以鼓励本机JS解决方案.

最佳答案
我看到你正在使用jQuery,而不是尝试自己解决这个逻辑,你可以考虑使用一个蒙版输入插件.我之所以选择this one只是因为它首先出现在搜索中.有自定义选项,它似乎满足您的所有要求.

  1. $('#txtCardNumber').mask("9999 9999 9999 9999");

猜你在找的HTML相关文章