在输入中将数字屏蔽为特殊字符(*)

CFN*_*nja 4 jquery masking

我试图将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;  
});   
Run Code Online (Sandbox Code Playgroud)

显然,替换将取代*。有关如何执行此操作的任何想法?

提前致谢。

Rio*_*ams 5

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

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

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

<input id='ssn' maxlength='11'/>
Run Code Online (Sandbox Code Playgroud)

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

在此处输入图片说明

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