关于Javascript:if variable contains

if variable contains

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
JavaScript: string contains

我有一个postcode变量,希望在更改/输入postcode时使用js将位置添加到另一个变量中。例如,如果输入st6,我希望输入stoke north。

我需要做一个if语句来运行,例如

1
2
3
4
5
6
7
8
if(code contains ST1)
{
    location = stoke central;
}
else if(code contains ST2)
{
    location = stoke north;
}

等。。。

我该怎么办?它不检查"code"是否等于一个值,但如果它包含一个值,我认为这是我的问题。


你可能想要indexOf

1
2
if (code.indexOf("ST1") >= 0) { ... }
else if (code.indexOf("ST2") >= 0) { ... }

它检查contains是否在string变量code中的任何地方。这要求code是一个字符串。如果您希望此解决方案不区分大小写,则必须使用String.toLowerCase()String.toUpperCase()将大小写全部更改为相同的大小写。

你也可以使用switch语句,比如

1
2
3
4
5
6
7
8
9
10
11
switch (true) {
    case (code.indexOf('ST1') >= 0):
        document.write('code contains"ST1"');
        break;
    case (code.indexOf('ST2') >= 0):
        document.write('code contains"ST2"');        
        break;        
    case (code.indexOf('ST3') >= 0):
        document.write('code contains"ST3"');
        break;        
    }?


您可以使用regex:

1
if (/ST1/i.test(code))


if (code.indexOf("ST1")>=0) { location ="stoke central"; }


检查一个字符串是否包含另一个字符串的最快方法是使用indexOf

1
2
3
4
5
if (code.indexOf('ST1') !== -1) {
    // string code has"ST1" in it
} else {
    // string code does not have"ST1" in it
}


如果您有很多要检查的映射,那么您可能需要存储一个映射列表,并对其进行循环,而不是使用一组if/else语句。类似:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var CODE_TO_LOCATION = {
  'ST1': 'stoke central',
  'ST2': 'stoke north',
  // ...
};

function getLocation(text) {
  for (var code in CODE_TO_LOCATION) {
    if (text.indexOf(code) != -1) {
      return CODE_TO_LOCATION[code];
    }
  }
  return null;
}

这样您就可以轻松地添加更多的代码/位置映射。如果您想处理多个位置,您可以在函数中构建一个位置数组,而不只是返回找到的第一个位置。