【问题标题】:SSN masking numbers to a special character (*) in input on keyupSSN 将数字屏蔽为 keyup 输入中的特殊字符 (*)
【发布时间】:2017-10-10 15:12:06
【问题描述】:

我正在尝试将 SSN 字段中的所有数字屏蔽为 * on keyup。 我在这里得到了解决方案 masking numbers to a special character (*) in input 。但是我怎样才能获得真正的价值并将其存储在隐藏字段中。如果数字在中间发生变化,则应相应更新。有什么办法可以做到这一点?例如,如果我输入 123,我应该将每个数字更改为 *** 显示几秒钟。如果我删除或删除 2 并放置 4,它应该给出隐藏值 143。类型 = 密码不起作用,因为数字应该在几秒钟内可见,然后更改为 *。

【问题讨论】:

  • 创建一个变量并保存在里面。还要确保这个变量的范围比处理程序更高
  • 它不会发生存储在变量中并检索。我试过了
  • onkeyup,试试variable += this.value.match(/[^*]/g)[0]; this.value = this.value.replace(/[^*]/g, '*')
  • 我认为您在检索 * 的值时遇到了麻烦,这意味着在文本框中您有多个星 (*),例如 12345 到 *****。您正在删除 * 但实际数字应该被删除。
  • @拉杰什。我添加了上述内容。发生的事情是当我输入 123 时它显示在警报中。但如果我删除 3 并添加 4,它显示 1234。3 没有被删除。如果我在 1 之前的开头添加 5。警报值为 12345。但实际上它应该返回 5124。

标签: javascript jquery


【解决方案1】:

Ras 我已经为你创建了一个代码。 这对 /[a-zA-Z0-9]/ 很有用。

实际上,我们为您的服务器保留 Hidden Element 中的值,并在您的 UI 中显示 ***。

这是一个演示,您可以根据需要进行自定义。

var arr = [];
function changeValue(event){
  var element = document.getElementById('password');
  var hiddenElement = document.getElementById('hiddenPass');
  var startPos = element.selectionStart;
  var endPos = element.selectionEnd;
  var isTrue = /[a-zA-Z0-9]/.test(element.value);
  // if [0-9] (for number) 
  if((isTrue || event.keyCode == 8)){
    // for deletion
    if(event.keyCode == 8){
      arr.splice(endPos,1);
      setStar(arr);
    }else{
        var val = element.value;
        var obj = {key:val[startPos-1], value:'*'};
        // perticular position insertion
        arr.splice(startPos-1, endPos-startPos, obj);
        setStar(arr);
    }
  }else{
    // for space controlling
    element.value = element.value.trim();
    return;  
  }
}

// star setting
function setStar(arr){
  var element = document.getElementById('password');
  var hiddenElement = document.getElementById('hiddenPass');
  var starText = "";
  var originalText = ""; 
  for(var i=0; i<arr.length; i++){
     starText += arr[i].value;
     originalText += arr[i].key;
  }
  element.value = starText;
  hiddenElement.value = originalText;
  console.log("HiddenElement", hiddenElement.value);
}
<input id="password" type="text" onkeyup="changeValue(event)">
<input id="hiddenPass" type="hidden">

【讨论】:

  • 感谢您的代码。但您不允许删除中间的数字,也不允许光标移动。如果我复制 3 个 vlaues 说 123 并粘贴到框中,它只需要最后一个隐藏,即 3. 而应该需要 123 。如果我将光标保持在两个数字之间并删除光标位置最后。并且附加值附加到隐藏字段中的最后一个位置,该位置没有给出正确的输出。那么我们如何才能实现这种情况..?
  • @ankit - 你有什么解决方案吗?
猜你喜欢
  • 2016-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-25
  • 1970-01-01
  • 2017-01-17
  • 2018-11-06
相关资源
最近更新 更多