在同一文本中替换多个输入值

时间:2014-03-25 22:30:39

标签: jquery html input replace

这是与我之前的帖子有关的另一个问题: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 {
  // ...
  }
}

谢谢!

5 个答案:

答案 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),因此它将匹配shoutSHOUTShoUT(以及其他大/小写组合)。

不幸的是,上面的内容也会匹配shoutshoutingshouted的字符序列,如果您的用例中存在错误,则可以使用\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 '';
}));

JS Fiddle demo

参考文献:

答案 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 {
      // ...
      }
  }
}