JavaScript 防止文本区域中的特殊字符

javascript preventing special characters in a textarea

本文关键字:特殊字符 区域 文本 JavaScript      更新时间:2023-09-26

我需要限制在文本区域中<>{}以下特殊字符的使用。我正在使用这个字母数字插件进行jQuery(https://github.com/KevinSheedy/jquery.alphanum)。

我的脚本如下:

$(document).on('keyup', '#ta_0', function(e){
    blacklisted_characters = $('#ta_0').alphanum({ disallow : '<>{}' }); // Specify characters to disallow
    if (blacklisted_characters) {
        if (!!$.prototype.fancybox)
            $.fancybox.open([
                {
                    type: 'inline',
                    autoScale: true,
                    minHeight: 30,
                    content: '<p class="fancybox-error">' + 'Désolé, l''utilisation de ce caractère n''est pas autorisée.' + '</p>'
                }],
                {
                    padding: 0
                });
        else
            alert('Désolé, l''utilisation de ce caractère n''est pas autorisée.');
    };
});

如果这些特殊字符已写入文本区域,则应显示弹出窗口。但是我认为我的代码中存在错误,因为它阻止我在文本区域中添加文本并每次弹出错误消息。

该插件仅适用于以下内容:

$('#ta_0').alphanum({ 
    disallow           : '<>{}' 
});

这是条件,我做错了。我的文本区域的 id 是 $ta_0 .我只需要创建一个 if 条件,以便确定以下字符是否写在文本区域中<>{}.如果这些字符写在文本区域中,它应该会触发错误弹出窗口。

任何帮助将不胜感激。

谢谢

函数:$('#ta_0').alphanum({ disallow : '<>{}' });不返回输入字符作为值,它返回使用 jQuery 选择器选择的输入数组,在本例中为 #ta_0 .由于这些输入存在于您的页面上,因此它将始终返回 true,这会导致弹出窗口继续运行。

您必须通过几种方式重新构建代码。

  1. $('#ta_0').alphanum({ disallow : '<>{}' });移出键控功能
  2. 查找列入黑名单的输入的键码 (<>{})
  3. 对照这些键码检查键控函数中的事件(在本例中为 e),以决定是否显示花哨的框。

澄清第 3 步:看起来很难用 keyup 做到这一点,因为字符都需要 Shift 键作为修饰符。但是使用 keypress ,您将获得 Shift+key 的唯一代码。

$(document).on("keypress", "#ta_0", function(event) {
  blacklisted_characters = [
    123, // {
    125, // }
    60, // <
    62 // >
  ];
  if (blacklisted_characters.indexOf(event.which) >= 0) {
    alert("Désolé, l''utilisation de ce caractère n''est pas autorisée.");
  }
});

我试图将其与 alphanum 插件结合起来做一个小提琴,但加载 github 用户内容似乎存在问题。但是在这里你可以看到上面代码的例子

好吧,它并不优雅,你必须稍微调整一下才能让它变得更好,但它做了我相信你需要的:

$("#myText").on("keyup",function(event){
    //console.log(event.which);
    if(event.which == 219 || event.which == 221 || event.which == 188 || event.which == 190)
        {
            $("#myText").val($("#myText").val().replace(/<|>|{|}/gi,""));
        }
});

希望对您有所帮助。