正则表达式不允许带重音符号

时间:2018-06-19 12:20:05

标签: javascript regex macos

我希望用户只能输入英文字符,下面的代码可以工作,但是在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">

2 个答案:

答案 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('');
        }
    });