我希望用户只能输入英文字符,下面的代码可以工作,但是在Mac上,如果您输入字母“ a”,则可以插入带有重音符号的字符,例如“á”。我已经尝试了几种不同的方法,包括keydown,keyup等,但是即使在释放密钥时,它也认为输入的值是“ A”,因此它可以通过正则表达式。任何人都知道发生了什么问题或如何更好地做到这一点?
$('.monogram-letters').on("keypress", function(e) {
var englishAlphabet = /[A-Za-z]/g;
var key = String.fromCharCode(e.which);
if (englishAlphabet.test(key)) {
console.log('true');
return true;
} else {
console.log('false');
}
return false;
});
$('.monogram-letters').on("paste", function(e) {
e.preventDefault();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input type="text" value="" class="monogram-letters valid" maxlength="3" id="options-41-container" name="options[41]" data-category="41" data-val="type your letters (up to 3)" required="" aria-required="true" aria-invalid="false">
答案 0 :(得分:-1)
您可以指示输入文本仅接受英文字符:
<input pattern="[a-z]" />
您显然也希望验证服务器端。
答案 1 :(得分:-2)
我最终想要的解决方案是检查最终字符串,然后在输入带有重音符的情况下清空输入
var $monogramInput = $('.monogram-letters');
var englishAlphabet = /^[a-z]+$/i;
$monogramInput.on("keypress", function(e) {
var key = String.fromCharCode(e.which);
if(englishAlphabet.test(key)) {
return true;
}
return false;
}).blur(function() {
var enteredValue = $(this).val();
if(!enteredValue.match(englishAlphabet)) {
$(this).val('');
}
});