Ion*_*ula 10 html javascript regex jquery
我有一个类型文本的输入,我返回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);
});
});Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type='text' name='word_to_check'>Run Code Online (Sandbox Code Playgroud)
现在在单词上b??它返回true而不是false,例如.
Chiu的评论是正确的:'aaáaa'.match(/\b.+?\b/g)yelds非常反直觉[ "aa", "á", "aa" ],因为\wJavaScript正则表达式中的"word character"()只是 [A-Za-z0-9_]('case-insensitive-alpha-numeric-and-underscore')的简写,所以word boundary(\b)匹配任何放在alpha-numerics和任何其他角色之间.这使得提取"Unicode单词"非常困难.
对于非单词编写系统,可以通过其双重性质识别"单词字符":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();
};
});Run Code Online (Sandbox Code Playgroud)
<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>Run Code Online (Sandbox Code Playgroud)