gpt4 book ai didi

javascript - 如何使用黑名单数组和正则表达式禁止带有变音符号的单词?

转载 作者:太空狗 更新时间:2023-10-29 13:12:18 24 4
gpt4 key购买 nike

我有一个文本类型的输入,我根据禁用词列表返回 true 或 false。一切正常。我的问题是我不知道如何检查数组中带有变音符号的单词:

var bannedWords = ["bad", "mad", "testing", "băţ"];
var regex = new RegExp('\\b' + bannedWords.join("\\b|\\b") + '\\b', 'i');

$(function () {
$("input").on("change", function () {
var valid = !regex.test(this.value);
alert(valid);
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type='text' name='word_to_check'>

例如,对于单词 băţ,它返回 true 而不是 false。

最佳答案

Chiu 的评论是正确的:'aaáaa'.match(/\b.+?\b/g) 产生了相当违反直觉的 [ "aa", "á", "aa"],因为JavaScript正则表达式中的“单词字符”(\w)是just a shorthand for [A-Za-z0-9_]('case-insensitive-alpha-numeric-and-underscore'),所以字边界(\b) 匹配字母数字 block 和任何其他字符之间的任何位置。这使得提取“Unicode 单词”变得非常困难。

对于非 unicase书写系统可以通过其双重性质识别“单词字符”:ch.toUpperCase() != ch.toLowerCase(),因此您更改后的代码段可能如下所示:

var bannedWords = ["bad", "mad", "testing", "băţ", "bať"];
var bannedWordsRegex = new RegExp('-' + bannedWords.join("-|-") + '-', 'i');

$(function() {
$("input").on("input", function() {
var invalid = bannedWordsRegex.test(dashPaddedWords(this.value));
$('#log').html(invalid ? 'bad' : 'good');
});
$("input").trigger("input").focus();

function dashPaddedWords(str) {
return '-' + str.replace(/./g, wordCharOrDash) + '-';
};

function wordCharOrDash(ch) {
return isWordChar(ch) ? ch : '-'
};

function isWordChar(ch) {
return ch.toUpperCase() != ch.toLowerCase();
};
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type='text' name='word_to_check' value="ba">
<p id="log"></p>

关于javascript - 如何使用黑名单数组和正则表达式禁止带有变音符号的单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39140488/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com