带通配符的Javascript开关语句?
如果我的javascript自动转到我的服务器,并以带通配符的Javascript开关语句?,javascript,jquery,wildcard,switch-statement,Javascript,Jquery,Wildcard,Switch Statement,如果我的javascript自动转到我的服务器,并以[49]的纯文本格式返回一个ID为49,有没有一种方法可以让我这样做。。。(我已经测试过了,但不起作用) 其中通配符是*,我想确保它包含在两个方括号内 因为我需要检查是否没有像error那样返回另一个单词,并且我保留默认值用于意外错误,有什么想法吗?:)谢谢 您可以尝试使用if-else和regex来匹配通配符模式 假设data=“[49]”或括号内的任何数字 if(/\[\d+\]/.test(data)){ //do somethi
[49]
的纯文本格式返回一个ID为49
,有没有一种方法可以让我这样做。。。(我已经测试过了,但不起作用)
其中通配符是*
,我想确保它包含在两个方括号内
因为我需要检查是否没有像
error
那样返回另一个单词,并且我保留默认值
用于意外错误,有什么想法吗?:)谢谢 您可以尝试使用if-else
和regex
来匹配通配符模式
假设data=“[49]”代码>或括号内的任何数字
if(/\[\d+\]/.test(data)){
//do something
}else{
//default
}
简短回答:不,switch/case无法处理通配符
您可能应该在进入交换机之前进行一些预处理/健全性检查,或者干脆完全放弃它,因为它更适合于特定的案例场景,而不是处理简化的数据。Regexp将在这里更好地为您服务。您可以明确地打开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块
if ((/^\[\d+\]$/).test(data)) {
//matches data;
} else if (data == "something else") {
//...
} else {
//...
}
我通常在服务/rest调用的响应方法中进行一些错误捕获,这样,如果出现错误,我几乎总是返回带有错误属性的正确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
}
}
试试看{
如果(response.responseText.indexOf(“),您可以创建一个模式和相关回调的列表,并执行一个简单的循环并检查匹配项。例如:
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();
}
}
我只是将数据保存到一个var,然后将数据设置为其他值(如果正确的话;)干杯,它可以,看我之前的帖子…实际上它可以为开关处理true,然后计算每个case。它不必像其他语言中的case语句那样是固定值。哇!不错,我不知道。@Tracker1的答案应该是正确的,考虑到问题的标题。
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!