将数字屏蔽到输入中的特殊字符(*)

我试图将SSN字段中的所有数字掩盖为*,同时保持用户只输入数值并用破折号格式化SSN。

这是一个小提琴链接:

https://jsfiddle.net/7f8p83am/

$('#ssn').keyup(function() { var val = this.value.replace(/\D/g, ''); var newVal = ''; var sizes = [3, 2, 4]; var maxSize = 10; for (var i in sizes) { if (val.length > sizes[i]) { newVal += val.substr(0, sizes[i]) + '-'; val = val.substr(sizes[i]); } else { break; } } newVal += val; this.value = newVal; }); 

显然,替换正在摆脱*。 关于如何做到这一点的任何想法?

提前致谢。

您可以考虑删除所有输入的非数字和星号,并用星号替换数字:

 // Remove all non-digits/asterisks and replace digits with asterisks var val = this.value.replace(/[^\d\*]/g, '').replace(/\d/g,'*'); 

此外,您可能还想尝试在元素上添加maxlength属性,以防止它继续:

  

最后,您可能需要考虑存储一个隐藏的字段或变量,它将存储您正确的SSN值,以便您可以按预期将其发布到服务器。

在此处输入图像描述

       JS Bin