【问题标题】:Prevent unallowed pasting into text-input防止未经允许的粘贴到文本输入中
【发布时间】:2015-11-16 09:15:58
【问题描述】:

我试图阻止用户将不允许的文本粘贴到输入字段中。输入是随机生成的 8 位代码,包含字母和数字。

但我不希望用户粘贴任何包含其他字符的文本。

我的输入框:

<input type='text' id='form-code-field' name='code' maxlength='8'>

注意:

我不是在寻找类似readonly 属性的东西,因为用户仍然需要在字段中输入字母数字文本。

【问题讨论】:

  • 怎么样read-only
  • 所以你的意思是这样的? &lt;input type='text' id='form-code-field' name='code' maxlength='8' readonly&gt;
  • 对不起,这不是我要找的,我不想让用户粘贴任何东西,但他仍然必须在里面写一些东西
  • 那么请更新您的问题。您也可以尝试keycode 在输入文本处于焦点时限制ctrl+v
  • 看起来问题太复杂了。为什么不直接说:“用户只能输入字母和数字”?

标签: javascript html jquery input


【解决方案1】:

您可以在input 事件上使用正则表达式测试值输入:

$('#form-code-field').on('input', function(){
    if(!/^[a-z0-9]+$/i.test(this.value)) this.value = $(this).data('oldValue') || "";
    else $(this).data('oldValue', this.value);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input type='text' id='form-code-field' name='code' maxlength='8'>

【讨论】:

  • 感谢您的回答!当我运行第一个代码时,我只能输入数字,但我也想输入字母。您可以更改代码以使其按上述方式工作吗?或告诉我如何更改正则表达式:-)
  • 正则表达式可以是/^[a-z0-9]+$/i 或使用\w 来获取所有有效的字母数字字符,例如也允许_
【解决方案2】:

对于 HTML5 浏览器,您也可以这样做,并且不需要脚本:

<input type='text' name='code' maxlength='8' pattern="^[a-z0-9]+$" title="a-z0-9">

这不会阻止某人写入无效字符,模式将在提交时进行评估,如果不匹配,则会中止提交并显示一条消息。

更新

我为那些不使用 jQuery 的人添加了一个纯 javascript 版本,它可以在表单上全局工作。只需在输入字段上设置“模式”即可。

该脚本也适用于非 HTML5 浏览器上的输入。

“安全”提示:

作为客户端评估,仅存储服务器端绝不是 100% 安全的,您总是需要在对其进行任何操作之前检查发布的内容。

document.getElementById('form').addEventListener('input', function(e){
  
    if (e.target.pattern && e.target.pattern.length > 0) {
        var regex = new RegExp(e.target.pattern,"i");
        if(!regex.test(e.target.value)) {
            if (e.target.value.length > 0) {
                e.target.value = e.target.getAttribute('data-old-value') || "";
            } else {
                e.target.setAttribute('data-old-value', "");
            }
        } else {
            e.target.setAttribute('data-old-value', e.target.value);
        }
    }
  
}, false);
<form id="form">

  Only alphanum (max 8): <input type='text' id='form-code-field' name='code' maxlength='8' pattern="^[a-z0-9]+$" title="a-z0-9"><br /><br />

  Any character (max 5): <input type='text' id='form-code-field' name='code' maxlength='5' ><br />

</form>

【讨论】:

  • 你可以,但它不会阻止任何事情。请再次阅读问题。
  • 这样安全吗?我的意思是,访问我网站的任何人都“可以”编辑模式,以便它再次接受特殊字符,不是吗?
  • 它与任何其他客户端方法一样安全,因为任何用户都可以“复制表单”并将其发送到您的服务器而无需任何 jQuery、模式等,因此您需要再次检查,服务器端,100% 确保输入是准确的。
  • @skobaljic 实际上添加了一个完全“要求”的更新。
  • 认为没有必要保留旧值,为此您可以使用dataset。我宁愿保持简单using match regex
猜你喜欢
  • 1970-01-01
  • 2021-09-01
  • 1970-01-01
  • 2014-03-03
  • 2012-02-11
  • 2022-06-23
  • 2019-07-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多