所以我有一个正在使用Vue.js构建的概念验证共轭练习应用程序。关键要素之一是,当您输入共轭的答案时,它将输入文本与String.startswith()
进行比较。直到字符串具有unicode字符,这都很好。似乎几乎所有输入的Unicode字符都与数据库中的字符不同。您实际上可以在此节点的CLI示例中直观地看到,我键入的“ ț”字符的版本实际上与数据库“ţ”中的字符不同。
这里是类型输入的输出,它是值和unicode值与比较值:
input: anunț // anun\u21B
comparison: anunţ // anun\u163
我已经尝试过类似.normalize()
之类的事情,但是它似乎不会影响输入的字符串或比较字符串。
> var input = 'anunț'
> var comparison = 'anunţ'
> input === comparison
false
> input.normalize() === comparison
false
> input.normalize() === comparison.normalize()
false
> input === comparison.normalize()
false
/// etc etc with NFC, NFD, NFKC, NFKD forms
> input.normalize()
'anunț'
> comparison.normalize()
'anunţ'
// i've also tried .normalize() with the string decoded into unicode
我尝试过转换为unicode并手动 替换了一组字符串,但是到目前为止,它并没有解决---并提出了很多问题---包括有时当您输入答案后,在输入整个字符串之前,开始进行正比较会出现问题。
最后,我开始尝试进行正则表达式比较,但我认为这也可能是另一种分散兔子洞的事情。
在没有进行上述任何尝试的情况下,精简到最基本的逻辑,这是我要针对上下文进行的操作的症结所在:
if (this.conjugation.startsWith(this.input)) {
this.status = "correct";
} else {
this.status = "incorrect";
}
if (conjugation === val) {
// okay, we are done
}
关于如何解决这个问题的任何想法?我目前正在使用罗马尼亚语动词进行测试,因此这些字符似乎在以下unicode范围内:
\u0000-\u007F
,\u0180-\u024F
,\u0100-\u017F
答案 0 :(得分:2)
您可以使用Intl.Collator
来构建只关心一些差异的整理器:
var word1 = "anunț"; // anun\u21B
var word2 = "anunţ"; // anun\u163
var collator = new Intl.Collator("ro", { sensitivity: "base" });
console.log(word1 === word2); // the words are not equal
console.log(collator.compare(word1, word2) == 0); // ... but they are "equal enough"
答案 1 :(得分:1)
这两个字符非常相似,但它们是不同的。像符号的一部分一样,在t和下逗号之间有一个空格。