为什么IndexOf与整个子字符串不匹配?

时间:2019-08-19 21:47:38

标签: javascript jquery indexof

我正在尝试制作一个基于文本的游戏,并且我需要使用Javascript和/或jQuery从textarea元素的用户输入中搜索某些子字符串,以触发唯一的响应。

我尝试使用PHP将输入作为表单数据提交,但是出于我的代码的目的,使用JS / jQuery更简单。我目前正在使用indexOf()方法。

var substr = "test substr";
function test() {
  var textareaVal = $("#wiyetxt").val();
  if (substr.indexOf(textareaVal) !== -1) {
    alert("Found");
  }
  else {
    alert("Nope");
  }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<textarea id="wiyetxt"></textarea>
<input type="button" onclick="test();" value="Send">
<input type="reset" value="Clear">

我希望我的函数在我的输入包含字符串“ test substr”时向“ Found”发出警报,但是如果子字符串中的任何字母顺序出现,它将向“ Found”发出警报。例如,“ t”,“ es”和“ substr”都会警告“ Found”以及确切的字符串。但是,如果我在字符串中添加任何内容,它都会提示“ Nope”,例如,“ test substr test substr”返回“ Nope”。为什么会发生这种情况?

3 个答案:

答案 0 :(得分:4)

这是因为您正在查找变量的子字符串,而不是查找输入字符串的子字符串。

您将希望像这样翻转indexOf的参数:

if (textareaVal.indexOf(substr) !== -1) {

答案 1 :(得分:1)

除非我有误解,否则我认为问题是您正在尝试检查substr是否包含文本区域中的值,但实际上您应该检查相反的。即文本区域中的值是否包含子字符串?

尝试翻转以下表达式:

substr.indexOf(textareaVal) 

textareaVal.indexOf(substr) 

答案 2 :(得分:-1)

ES6方式:

if (textareaVal.includes(substr)) {
    alert("Found");
} else {
    alert("Nope");
}