切换组合大小写字符串regex和数字
Switch combining cases string regex and number
有没有一种方法可以在一个Javascript switch语句中创建多个案例?
在我的代码中,我通过jQuery接收一个字段的值。
是否可能一种情况下检查字符串regex,另一种情况检查相同变量的编号?
我的思路是:
var field = $(this).val();
var msg;
switch (field)
{
case field.test('Yes'):
msg = "FOO'n";
break;
case 10:
msg = "BAR'n";
break;
}
尽管我在这里看到了:JavaScript 中用于字符串匹配的Switch语句
在字符串上使用switch的方法是向switch语句发送一个"true"值。
实现这一目标的最简洁(也是最正确!)的方法是什么?
好吧,在我的代码之上编译两个答案,这两个答案都是有效的,也是最优雅的IMO是:
var fieldVal = $(this).val();
var msg;
switch (true)
{
case /Yes/.test(fieldVal):
msg = "FOO";
break;
case fieldVal > 10 :
msg = "BAR";
break;
}
这是作为单独的if语句工作的,因为我们正在评估情况是否返回true,但以一种更清晰、更简洁的方式,可以让我们选择在一个开关中添加完全不同的测试语句。
它之所以有效,可能是因为所计算的case表达式被解释为true或false值,然后对照main进行检查-开关(真)
与switch表达式相比,用例不需要单个值,但可以放置多个用例来执行相同的代码:
switch (field) {
case 'Yes':
case 'yes':
case 'YES':
msg = "FOO'n";
break;
case 10:
msg = "BAR'n";
break;
}
但为了使用测试作为案例,你可以将true传递给switch(我在一些开源项目中发现了这个技巧):
switch (true) {
case field.test('Yes'):
msg = "FOO'n";
break;
case field == 10:
msg = "BAR'n";
break;
}
但这与if/else
相同
注意:您使用test()
不正确,它是正则表达式对象的方法,因此您需要/Yes/.test(field)
而不是field.test('Yes')
。无论如何
如果你只有两种情况,那么我会使用if/else/else if
结构:
var field = $(this).val();
var msg;
if(/Yes/.test(field)) {
msg = "FOO'n";
} else if (field === 10) {
msg = "BAR'n";
}
如果你需要添加额外的案例,我只需要在末尾添加额外的if else {}
分支。
如果你有几个特定的数字案例,你可以考虑把它们放在switch
中,最后在default
中进行regex测试:
switch (field) {
case 10:
msg = "BAR'n";
break;
case 30:
msg = "whatever'n";
break;
case 50:
msg = "hi'n";
break;
default:
if (/Yes/.test(field)) {
msg = "FOO'n";
else if (/No|N|False|/i.test(field)) {
msg = "blah'n";
}
break;
}
你在问题中提到的switch (true)
选项实际上只是if/else/else if
的一个更混乱的版本,所以它实际上没有意义,除非你有一些失败的情况:
switch(true)
case /Yes/.test(field):
case /Y/.text(field):
case /Whatever/.text(field):
msg = "FOO'n";
break;
case field == 10:
msg = "BAR'n";
break;
}
即使这样,具有多个条件的if
和||
也可以说与适当的换行符一样整洁,并且将多个正则表达式组合为一个正则表达式可能要整洁得多。
- 制作一个regex来验证只有一个数字的字符串
- RegEx JavaScript:数字后的符号提取
- 如何在jquery+javascript中只在输入框中输入数字(使用regex)
- RegEx查找4位数字前后的逗号
- Regex允许数字大于0.5
- JavaScript Regex,用于由特定字符串包围的数字和空格
- Regex表示10位数字,其中没有't允许所有零、所有单个no和序列号
- Javascript Regex,在字符串中查找数字
- Javascript Regex选择每个非字母数字字符和空白
- Javascript-Regex,用于逗号分隔的字母数字
- RegEx接受小于-50.0或大于80.0的数字
- 使用Regex获取括号内的数字
- 在javascript中接受十进制数字的Regex
- REGEX (javascript) - 允许字母数字字符中的特殊字符不在第一个位置
- regex:字符串中的最小数字总数
- Regex用于字母数字字符串中的数字计数
- regex:如何捕获字符串中的三个数字,而不是字符串的其余部分
- JavaScript-Regex删除代码/特殊字符/数字等
- Javascript RegEx数字仅来自后面带有逗号和文本的数字
- Javascript regex数字范围格式检查