Textarea块重音字母和alt代码符号

时间:2019-06-11 01:00:36

标签: javascript html css forms textarea

我目前正在阻止javascript字符代码,但是它不阻止带重音符号的字母和替代代码符号,例如è,á,☺,♥等。

 $("#cstedit-addembossing").keypress(function(e) {

    var key = e.which;
    if(key > 32 && (key < 48 || key > 57) &&(key < 65 || key > 90) && (key < 97 || key > 122)) {
        return false;
    }
});  

我希望不允许这些字符。

2 个答案:

答案 0 :(得分:2)

考虑将允许的字符列入白名单,而不是将其列入黑名单。我使用input事件取得了一些成功,该事件seems to fire甚至在按了ALT键后(例如重音字母)也是如此。

下面,仅允许使用字母和数字。重音字母首先会转换为非重音字母,但是如果您不想要该字母,可以将其删除。

我从Lewis Diamond的答案here中获得了用于转换重音字符的代码。

$('#cstedit-addembossing').on('input', function() {

  let $this = $(this);

  let newVal = $this.val()
    .normalize('NFD').replace(/[\u0300-\u036f]/g, "")
    .replace(/[^0-9A-Za-z]+/g, '');

  $this.val(newVal);

})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<textarea id="cstedit-addembossing"></textarea>

答案 1 :(得分:1)

并非所有文本输入都会产生按键事件,尤其是在产生字符涉及多个按键的情况下。

与其试图通过阻止输入事件来捕获非法字符,还不如将输入元素中已经插入的非法字符删除,就可以将其删除。