Javascript 匹配时带有重音字符的Regexp
当用户尝试验证时,我必须检查文本区域中的禁止字。 禁忌词列表存储在Javascript 匹配时带有重音字符的Regexp,javascript,regex,Javascript,Regex,当用户尝试验证时,我必须检查文本区域中的禁止字。 禁忌词列表存储在jsBlackList数组中,这是我目前代码的一部分: var fieldValue = value; var hasForbiddenWord = false; for (i = 0; i < jsBlackList.length; i++) { var regex = new RegExp("\\b"+jsBlackList[i]+"\\b","gi"); fieldValue = fieldValue.
jsBlackList
数组中,这是我目前代码的一部分:
var fieldValue = value;
var hasForbiddenWord = false;
for (i = 0; i < jsBlackList.length; i++) {
var regex = new RegExp("\\b"+jsBlackList[i]+"\\b","gi");
fieldValue = fieldValue.replace(regex, '***');
hasForbiddenWord = hasForbiddenWord || fieldValue.match(regex);
}
value = fieldValue;
var fieldValue=value;
var HasBankedenWord=false;
对于(i=0;i
但问题是,jsBlackList
有一些带重音的字符,而用户可以不带重音地书写(例如,jsBlackList可以有“déjá”,用户键入了“deja”、“déja”或“dejá”)
如何检查缺少的口音
注意:关于“标记为重复”:重复的问题是关于“不带重音的regexp检查带重音的文本”,我的问题是“带重音的regexp检查带潜在缺失重音的文本”。我认为你最好的选择是:
- 删除黑名单中的所有重音字符
- 处理文本以将重音字符替换为其非重音等效字符
然后,您可以进行比较,而不必费心寻找重音。您需要创建一个等价物列表,并在正则表达式或所有等价物中:
dé|ejà|a
实现这一点的一个方法是我稍微改变一下你的黑名单: 用相同的替换替换所有带重音的字符 例如:
“déjá”
到:“d(e)j(a)”
如果您的黑名单很大,那么您可能希望自动执行此替换,但最终这样编写黑名单是很方便的。您可以尝试这样做:
d[ée]j[a]
字符类更适合此-d[ée]j[a]最后,这就是我使用的。我不得不重做黑名单,但我认为这是最好的解决方案。字符类也很好。可读性偏好可能会决定。这是一种简单的方法,但正如你所看到的,我必须将匹配的禁止字符替换为三元组*。如果我按照你的解释去做的话,就很难只改变匹配的单词,因为其他单词或者文本需要保留他的重音字符。