如何让掩码输入框的原始文本而非星号存入数据库?
解决掩码输入存原始值到数据库的问题
问题根源
你的代码有两个关键错误:
destroyMask函数逻辑完全写反了,和createMask做一样的操作,根本无法还原原始有效字符- 若提交时误传了显示掩码的
maskNum输入框值,就会把星号存进数据库
修正方案
1. 修正掩码处理函数
把destroyMask改成保留有效字符(数字、+),移除星号的逻辑,同时简化冗余的正则表达式:
function createMask(string) { // 将非数字、非+的字符替换为*,生成显示用的掩码 return string.replace(/[^\+0-9]/g, '*'); } function destroyMask(string) { // 只保留数字和+,移除所有星号和无效字符,还原原始有效内容 return string.replace(/[^\\+0-9]/g, ''); }
2. 优化输入事件逻辑
确保每次输入时,先提取原始有效内容存入隐藏框,再生成掩码显示:
$("input[name='maskNum']").on("input", function(e) { const rawValue = this.value; // 提取有效字符存入隐藏字段 const cleanDigits = destroyMask(rawValue); $("input[name='uDigits']").val(cleanDigits); // 生成掩码显示在输入框 this.value = createMask(cleanDigits); });
3. 确保提交原始值
- 把
uDigits设置为隐藏输入框:<input type="hidden" name="uDigits"> - 表单提交时,只传递
uDigits的值给后端,不要传递maskNum的内容,这样数据库就会存入原始的有效字符,而非星号。
内容的提问来源于stack exchange,提问作者Coder_Craft
相关产品推荐
相关产品推荐

