没有插件的Javascript输入文本屏蔽

use*_*897 6 javascript jquery input masking

我想在不更改实际值的情况下屏蔽输入框中的文本。我不能使用任何插件。

我目前正在执行此操作-但您可以看到问题是提交时实际值已更改。如何更改显示值?

$("input[name='number']").focusout(function(){
    var number = this.value.replace(/(\d{2})(\d{3})(\d{2})/,"$1-$2-$3");
    this.value = number;
}
Run Code Online (Sandbox Code Playgroud)

Dom*_*ana 10

您需要两个输入

两个输入即可完成工作。一个输入将包含被遮罩的文本,另一个输入将是包含实际数据的隐藏输入。

<input type="text" name="masknumber">
<input type="text" name="number" style="display:none;">
Run Code Online (Sandbox Code Playgroud)

我采用掩蔽的方式是构建用于掩蔽和反掩盖内容的函数,以便所有内容保持统一。

$("input[name='masknumber']").on("keyup change", function(){
        $("input[name='number']").val(destroyMask(this.value));
    this.value = createMask($("input[name='number']").val());
})

function createMask(string){
    return string.replace(/(\d{2})(\d{3})(\d{2})/,"$1-$2-$3");
}

function destroyMask(string){
    return string.replace(/\D/g,'').substring(0,8);
}
Run Code Online (Sandbox Code Playgroud)

工作中的JSFiddle

  • 确实!这通过正则表达式操作运行“字符串”!在正则表达式中,“( )”放置在“捕获组”周围。我们稍后会详细讨论这一点,但首先,让我告诉您“\d”表示“数字”,“\d{2}”表示“两位数字”。最后,“$”后跟一个数字表示一个捕获组,哪个捕获组由哪个数字表示。因此,正如您可能已经得出的结论,该代码采用它找到的第一个 7 位数字字符串,并将其分成前两个,然后是中间三个,然后是最后两个(中间有“-”)。要了解更多信息,请查看 https://regexr.com 及其左侧菜单中的备忘单! (2认同)