if-else、switch 和正则表达式之间的复杂性
Complexity between if-else, switch and regex
我要优化 javascript 代码,我看到旧代码如下,
var emcont = $('#emcont').val();
numericMatch = emcont.match(/\d/g);
if (numericMatch == null) {
isValid = false;
$('#msg_emcont').html(getMessage('msg_emcont')).show();
} else if (emcont.length != 14) {
isValid = false;
$('#msg_emcont').html(getMessage('msg_emcont')).show();
} else if (numericMatch.length && numericMatch.length != 10) {
isValid = false;
$('#msg_emcont').html(getMessage('msg_emcont')).show();
} else {
$('#msg_emcont').html('').hide();
}
我打算将 if-else 条件转换为 switch 条件,但是上面代码中的问题是第二个条件验证使用了 emcont
变量,所以我不能直接在 [= 中使用 numericMatch
14=] 语句。所以我决定直接在 switch
语句中使用 emcont
变量,如下面的代码,
switch(emcont)
{
case emcont.match(/\d/g) == null:
isValid = false;
$('#msg_emcont').html(getMessage('msg_emcont')).show();
break;
case emcont.length != 14:
isValid = false;
$('#msg_emcont').html(getMessage('msg_emcont')).show();
break;
case emcont.match(/\d/g).length && emcont.match(/\d/g).length != 10:
isValid = false;
$('#msg_emcont').html(getMessage('msg_emcont')).show();
break;
default:
$('#msg_emcont').html('').hide();
break;
}
在 switch case 验证中使用正则表达式,所以我需要知道哪个代码在性能方面更好。
请不要滥用 switch(true)
的副作用,这正是您的意思
这是干的,更容易阅读
var emcont = $('#emcont').val();
const numericMatch = emcont.match(/\d/g);
$('#msg_emcont')
.html(getMessage('msg_emcont'))
.toggle(
numericMatch == null ||
emcont.length != 14 ||
(numericMatch.length && numericMatch.length != 10)
)
你甚至可以考虑搬家
$('#msg_emcont').html(getMessage('msg_emcont'))
到页面加载所以它只完成一次
我要优化 javascript 代码,我看到旧代码如下,
var emcont = $('#emcont').val();
numericMatch = emcont.match(/\d/g);
if (numericMatch == null) {
isValid = false;
$('#msg_emcont').html(getMessage('msg_emcont')).show();
} else if (emcont.length != 14) {
isValid = false;
$('#msg_emcont').html(getMessage('msg_emcont')).show();
} else if (numericMatch.length && numericMatch.length != 10) {
isValid = false;
$('#msg_emcont').html(getMessage('msg_emcont')).show();
} else {
$('#msg_emcont').html('').hide();
}
我打算将 if-else 条件转换为 switch 条件,但是上面代码中的问题是第二个条件验证使用了 emcont
变量,所以我不能直接在 [= 中使用 numericMatch
14=] 语句。所以我决定直接在 switch
语句中使用 emcont
变量,如下面的代码,
switch(emcont)
{
case emcont.match(/\d/g) == null:
isValid = false;
$('#msg_emcont').html(getMessage('msg_emcont')).show();
break;
case emcont.length != 14:
isValid = false;
$('#msg_emcont').html(getMessage('msg_emcont')).show();
break;
case emcont.match(/\d/g).length && emcont.match(/\d/g).length != 10:
isValid = false;
$('#msg_emcont').html(getMessage('msg_emcont')).show();
break;
default:
$('#msg_emcont').html('').hide();
break;
}
在 switch case 验证中使用正则表达式,所以我需要知道哪个代码在性能方面更好。
请不要滥用 switch(true)
的副作用,这正是您的意思
这是干的,更容易阅读
var emcont = $('#emcont').val();
const numericMatch = emcont.match(/\d/g);
$('#msg_emcont')
.html(getMessage('msg_emcont'))
.toggle(
numericMatch == null ||
emcont.length != 14 ||
(numericMatch.length && numericMatch.length != 10)
)
你甚至可以考虑搬家
$('#msg_emcont').html(getMessage('msg_emcont'))
到页面加载所以它只完成一次