我想将输入容量保持为 16 个数字,并在每组 4 个数字之间插入空格。
我深入搜索了信用卡输入,允许用户插入 16 位数字并在数字之间输入“-”或空格,但所有结果都是针对 JavaScript 等的。 是否有 Angular 方法可以做到这一点? 如果您有任何示例,请分享。
原文由 devmrh 发布,翻译遵循 CC BY-SA 4.0 许可协议
我想将输入容量保持为 16 个数字,并在每组 4 个数字之间插入空格。
我深入搜索了信用卡输入,允许用户插入 16 位数字并在数字之间输入“-”或空格,但所有结果都是针对 JavaScript 等的。 是否有 Angular 方法可以做到这一点? 如果您有任何示例,请分享。
原文由 devmrh 发布,翻译遵循 CC BY-SA 4.0 许可协议
13 回答13k 阅读
7 回答2.2k 阅读
3 回答1.4k 阅读✓ 已解决
6 回答1.3k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
3 回答1.4k 阅读✓ 已解决
6 回答1.1k 阅读
遍历信用卡号并手动添加空格
这适用于 Angular 7+,可能也适用于更早的版本。
对于大多数信用卡类型,我们可以循环遍历数字并每四位添加一个空格,但对于美国运通,则采用 4-6-5 模式。
唯一棘手的部分是处理退格键和光标位置编辑(即,如果用户在输入内部单击以对其进行编辑)。如果我们不处理这个问题,循环将使编辑数字成为一个奇怪的用户体验问题。
您可以为此编写一个自定义组件或指令,但如果您的应用程序中只有一个组件需要信用卡号,则无需这样做,这种情况很常见。 (如果您的应用程序中有多个信用卡输入,请将此代码放在指令中。)
以下是我在应用程序的支付组件中的操作方式:
partitions
的变量来处理间距格式。 Amex 将其设置为 4-6-5,所有其他卡的默认设置为 4-4-4-4。我们将在添加空格时遍历这些分区。#ccNumber
进行光标位置检测。(如果您有自己的例程来检测美国运通号码,请使用它。我在这里使用的只是检查前两位数字并将它们与 PAN/IIN 标准 进行比较。)
在你的组件中,确保你有正确的导入:
和:
当你设置你的表单控件时,这样做可以让空格包含在你的正则表达式模式中:
最后,在您的模板中,像这样配置您的元素:
你应该可以走了。当用户输入他们的号码时,空格会自动出现,如果他们输入错误,他们仍然可以返回并进行编辑。
PS:如果你想用破折号(
-
)而不是空格来格式化,请在cardNumber.setValue(numbers.join(' '))
行和正则表达式调整中用破折号替换空格。