从技术上讲,您可以设置一个pattern
属性并列出所有允许的字符,如下所示:
<input pattern="^[-a-zA-Z0-9 äÄöÖüÜßẞÇçâêîôûàèùéêëïü]*$" />
或者,如果您想允许范围内的所有 Unicode 字符(包括阿拉伯语):
<input pattern="^[ -ࣿ]+$" />
请注意,这两种解决方案都省略了非亚洲用户可能使用的一些字符,例如在第一个模式中的斯堪的纳维亚字符,如 å 或 ø,在第二个模式中,大写 ẞ、表情符号等。如果您可以对 Unicode 标准中的 100000+ 个字符进行分类,则可以简单地列出模式中允许的所有字符。
模式允许输入字符,但您可以使用:invalid
CSS 类提供适当的反馈。如果你真的想删除字符,你可以清理它们,像这样(现场演示):
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, '');
}
但是,这些解决方案中的任何一个都是对用户不利的。您几乎肯定会错过一些极端情况(已经在这里:阿拉伯语是一种亚洲语言吗?是否禁止出现在亚洲语言和非亚洲语言中的字符?),来自世界各地的用户都会对您网站上的体验感到沮丧.
相反,修复处理外来字符的代码,并向用户解释为什么首选拉丁字符。