这是与我之前的帖子有关的另一个问题:Replace several input values
基本上在我的聊天系统中。当用户在输入框中键入“消息hello!”时,仅输出'hello!'。 shout 命令也是如此。 (见下面的代码)。
但是,如果用户键入'喊出消息hello!',我仍然希望忽略喊和消息。事实并非如此!任何人都可以帮我把它包起来吗?
function checkValue() {
var value = document.getElementById("userinput").value;
// message
if(value.indexOf("message") != -1) {
$('#output').html(value.replace('message', ''));
}
// shout
else if(value.indexOf("shout") != -1) {
$('#output').html(value.replace('shout', ''));
}
else {
// ...
}
}
谢谢!
答案 0 :(得分:2)
请不要理会if
,并使用正则表达式:
$('#output').html(value.replace(/shout|message/gi, ''));
如果您想要阻止一系列单词:
var unspeakables = ['shout', 'message', 'whatever'];
$('#output').html(value.replace(new RegExp(unspeakables.join('|'),'gi'), ''));
gi
表示正则表达式将在字符串中全局搜索(g
),并且不区分大小写(i
),因此它将匹配shout
, SHOUT
和ShoUT
(以及其他大/小写组合)。
不幸的是,上面的内容也会匹配shout
和shouting
中shouted
的字符序列,如果您的用例中存在错误,则可以使用\b
表示必须在匹配中找到word-end:
var unspeakables = ['shout', 'message', 'whatever'];
$('#output').html(value.replace(new RegExp('\\b' + unspeakables.join('\\b|\\b') + '\\b','gi'), ''));
\b
变为\\b
以逃避本身逃离\
字符的b
字符(使其成为特殊字符,而不是文字b
要找到的字符(正则表达式有点复杂,经常出现奥术)。
如果你不介意,我也会跟进。我的喊将文本颜色设置为“红色”,如
$('#output').css("color", "red");
,而我的消息则不会。如果文本包含“shout”,则文本应变为红色。否则它应该保持不变。我知道如何继续但不知道如何提及“喊叫”。
您可以使用一个对象,以及replace()
可用的回调函数:
var unspeakables = ['shout', 'message', 'whatever'],
formatting = {
'shout' : {
'color' : 'red'
}
};
$('#output').html(value.replace(new RegExp('\\b' + unspeakables.join('\\b|\\b') + '\\b','gi'), function(matchedWord){
$('#output').css(formatting[matchedWord.toLowerCase()] || {});
return '';
}));
参考文献:
答案 1 :(得分:1)
我认为你可以使用正则表达式:
value = value.replace(/(message|shout) +/g, '');
答案 2 :(得分:0)
如果您使用if else,则只会运行一个条件,为了满足您的方案,您需要运行两种情况。
function checkValue() {
var value = document.getElementById("userinput").value;
// message
if(value.indexOf("message") != -1) {
$('#output').html(value.replace('message', ''));
}
// shout
if(value.indexOf("shout") != -1) {
$('#output').html(value.replace('shout', ''));
}
else {
// ...
}
}
答案 3 :(得分:0)
只需删除其他内容即可。你希望所有的检查都发生......不是一个或另一个。
function checkValue() {
var value = document.getElementById("userinput").value;
// message
if(value.indexOf("message") != -1) {
$('#output').html(value.replace('message', ''));
}
// shout
if(value.indexOf("shout") != -1) {
$('#output').html(value.replace('shout', ''));
}
}
答案 4 :(得分:0)
function checkValue() {
var value = document.getElementById("userinput").value;
if(value.indexOf('shout message') !== 0){
// message
if(value.indexOf("message") != -1) {
$('#output').html(value.replace('message', ''));
}
// shout
else if(value.indexOf("shout") != -1) {
$('#output').html(value.replace('shout', ''));
}
else {
// ...
}
}
}