我目前正在阻止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;
}
});
我希望不允许这些字符。
答案 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)
并非所有文本输入都会产生按键事件,尤其是在产生字符涉及多个按键的情况下。
与其试图通过阻止输入事件来捕获非法字符,还不如将输入元素中已经插入的非法字符删除,就可以将其删除。