javascript - Unicode Javascript - 需要向用户显示无效字符

标签 javascript regex unicode emoji

我正在寻找能够解决以下问题的解决方案,但我对 Unicode 的经验有限。

基本上,用户可以在文本字段中输入内容,但是当他们提交时,我想显示一个WEREN"T GSM 兼容的字符列表。即所有没有0-127的字符代码。

但是,当您将表情符号混入其中时,它会严重中断,因为如果我对数组进行字符处理,一些表情符号字符会被打乱,并且会显示验证失败的错误原因。

I.E "😀".length = 2,它将被分成 2 个字符,因此当我告诉用户失败的原因时,他们会得到错误的原因。

任何关于我如何解决这个问题的想法都将不胜感激。

编辑:不能使用 ES6 并且需要一个无效字符数组

最佳答案

假设您正在使用这样的正则表达式来查找不在有效范围内的字符:

/[^\0-\x7f]/

你可以修改它来匹配UTF-16 surrogate pairs :

/[\ud800-\udbff][\udc00-\udfff]|[^\0-\x7f]/

在现代浏览器上,您也可以只使用 u 标志直接对 Unicode 代码点进行操作:

/[^\0-\x7f]/u

不过,这仍然只会获得代码点,而不是字素簇(对于组合字符、现代组合表情符号、肤色和所有语言的一般正确性很重要)。那些更难处理。什么时候(如果?)browser support appears ,他们会不那么努力;在那之前,a dedicated package是您最好的选择。

var NON_GSM_CODEPOINT = /[\ud800-\udbff][\udc00-\udfff]|[^\0-\x7f]/;
var input = document.getElementById('input');

input.addEventListener('input', function () {
  var match = this.value.match(NON_GSM_CODEPOINT);
  this.setCustomValidity(match ? 'Invalid character: “' + match[0] + '”' : '');
  this.form.reportValidity();
});
<form>
  <textarea id="input"></textarea>
</form>

关于javascript - Unicode Javascript - 需要向用户显示无效字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44793593/

相关文章:

javascript - 为什么有2个setState可用

javascript - 如何仅在博客移动模板中进行自定义(请检查我的问题)

python - 如何使用 sub() 匹配多行模式?

java - java中的正则表达式匹配模式

ruby - 在 Ruby 中以 unicode 代码的形式打印字符串

go - 在 golang 中 slice unicode/ascii 字符串?

ios - 如何使用 Unicode 将自定义符号分配给 UIButton?

javascript - 如何使用 JavaScript/RegEx 将 2 个 RegEx 语句组合在一起?

javascript - 如何调用一个函数来重新加载另一个函数(例如在 "orientationchange()"上)?

regex - 将多段文档拆分为段落编号的句子