-1

我希望用户防止在输入字段中输入双字节字符。以下代码将允许用户输入 az 或 AZ。我希望用户阻止输入韩文、中文等双字节字符。但应该允许用户输入西班牙字符,因为这些不是双字节字符。当用户复制粘贴双字节字符时,这应该可以工作。

$("#myTextBox").bind("keypress", function(event) { 
        var charCode = event.which;
        var keyChar = String.fromCharCode(charCode); 
        return /[a-zA-Z]/.test(keyChar); 
    });
4

1 回答 1

2

从技术上讲,您可以设置一个pattern属性并列出所有允许的字符,如下所示:

<input pattern="^[-a-zA-Z0-9 äÄöÖüÜßẞÇçâêîôûàèùéêëïü]*$" />

或者,如果您想允许范围内的所有 Unicode 字符(包括阿拉伯语):

<input pattern="^[ -&#2303;]+$" />

请注意,这两种解决方案都省略了非亚洲用户可能使用的一些字符,例如在第一个模式中的斯堪的纳维亚字符,如 å 或 ø,在第二个模式中,大写 ẞ、表情符号等。如果您可以对 Unicode 标准中的 100000+ 个字符进行分类,则可以简单地列出模式中允许的所有字符。

模式允许输入字符,但您可以使用:invalidCSS 类提供适当的反馈。如果你真的想删除字符,你可以清理它们,像这样(现场演示):

input.addEventListener('input', () => {
    var allowed_m = /\[([^\]]*)\]/.exec(input.pattern);
    var negative_pattern = new RegExp('[^' + allowed_m[1] + ']', 'g');
    input.value = input.value.replace(negative_pattern, '');
}

但是,这些解决方案中的任何一个都是对用户不利的。您几乎肯定会错过一些极端情况(已经在这里:阿拉伯语是一种亚洲语言吗?是否禁止出现在亚洲语言和非亚洲语言中的字符?),来自世界各地的用户都会对您网站上的体验感到沮丧.

相反,修复处理外来字符的代码,并向用户解释为什么首选拉丁字符。

于 2018-02-26T10:49:51.200 回答