带通配符的Javascript switch语句?

时间:2010-02-16 07:39:30

标签: javascript jquery wildcard switch-statement

如果我的javascript ajaxes离开我的服务器并以49的纯文本格式返回[49]的ID,那么我有办法做这样的事情......(我有测试并没有工作)

switch(data)
{
    case '[*]':
        (..etc.)
    break;
}

通配符是*,我想确保它包含在两个方括号内?

因为我需要检查是否还没有像error那样返回另一个单词而我正在保留default的意外错误,任何想法? :)谢谢!

4 个答案:

答案 0 :(得分:9)

您可以明确地切换为true,这将对每个case语句使用评估。

switch (true) {
    case ((/^\[\d+\]$/).test(data)):
       //matches data;
       break;
    case (data == "something else"):
       //...
       break;
    default:
       //...
}

但是,如果你有4-5个案例,那么最好使用if / else if / else if / else blocks。

if ((/^\[\d+\]$/).test(data)) {
       //matches data;
} else if (data == "something else") {
       //...
} else {
       //...
}

我通常在服务/休息调用的响应方法中进行一些错误捕获,这样如果出现错误,我几乎总是返回一个带有错误属性的正确json。

try {
  if (response.responseText.indexOf("<html") >= 0) { 
    throw response.responseText;
  }

  var data = JSON.parse(response.responseText);
  if (data.error) 
    throw data.error;

  //handle response data object.
  if ((/^\[\d+\]$/).test(data)) {
    //matches data;
  } else if (data == "something else") {
    //...
  } else {
    //...
  }
} catch(err) {
  if (err && err.message) {
      //use err.message
  } else if (err && err.toString().indexOf("<html") >= 0) {
      //handle error text
  }
}

答案 1 :(得分:1)

你可以创建一个模式列表和相关的回调,并做一个简单的循环并检查匹配。例如:

    var patterns = [];

    function myCallback(){ document.write('myCallback!'); }
    function myOtherCallback(){ document.write('myOtherCallback!'); }
    function myLastCallback(){ document.write('You will never see me!'); }

    patterns.push({'pattern':new RegExp(/\[.+\]/),'callback': myCallback});
    patterns.push({'pattern':new RegExp(/.+/),'callback':myOtherCallback});
    patterns.push({'pattern':new RegExp(/A-Z{3}/),'callback':myLastCallback});

    var f = "[49]";
    for(var i=0;i<patterns.length;i++){
        if(patterns[i].pattern.test(f)){
            patterns[i].callback();
        }
    }

其中输出以下内容:

myCallback!myOtherCallback!

答案 2 :(得分:0)

您可以尝试使用if elseregex来匹配通配符模式。

假设data = "[49]";或括号内的任何数字。

if(/\[\d+\]/.test(data)){
    //do something
}else{
    //default
}

答案 3 :(得分:0)

简答:不,切换/案例无法处理通配符。

您可能应该在进入交换机之前进行一些预处理/健全性检查,或者只是将其完全丢弃,因为它更适合特定的情况而不是处理简化的数据。 Regexp将在这里为您提供更好的服务。