如果我的javascript ajaxes离开我的服务器并以49
的纯文本格式返回[49]
的ID,那么我有办法做这样的事情......(我有测试并没有工作)
switch(data)
{
case '[*]':
(..etc.)
break;
}
通配符是*
,我想确保它包含在两个方括号内?
因为我需要检查是否还没有像error
那样返回另一个单词而我正在保留default
的意外错误,任何想法? :)谢谢!
答案 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 else
和regex
来匹配通配符模式。
假设data = "[49]";
或括号内的任何数字。
if(/\[\d+\]/.test(data)){
//do something
}else{
//default
}
答案 3 :(得分:0)
简答:不,切换/案例无法处理通配符。
您可能应该在进入交换机之前进行一些预处理/健全性检查,或者只是将其完全丢弃,因为它更适合特定的情况而不是处理简化的数据。 Regexp将在这里为您提供更好的服务。