我正在尝试将if
语句管理到switch
语句中以评估正则表达式,但我不知道如何处理它。我尝试了很多可能但却无法做到。看下面的代码,是不是?:
var username = $('input.username'),
phone = $('input.phone'),
numRegex = /^[0-9]/i,
alphaRegex = /^[a-zA-Z]/i,
usernameVal = username.val(),
phoneVal = phone.val();
switch (phoneVal) {
case numRegex.test(phoneVal):
console.log('Only digits please.');
break;
default:
console.log('It\'s all good.');
}
非常感谢。
答案 0 :(得分:4)
我认为这种情况违背了switch
陈述中具有条件的case
陈述的观点。它的目的是在单个输入下测试多个输出。
如果JavaScript支持switch..case
中的多个输入(或destructuring数组),我可能会看到类似这样的内容:
switch (numRegex.test(phoneVal), alphaRegex.test(usernameVal)) {
case false, false:
console.log('Neither are valid.');
break;
case true, false:
console.log('Invalid username.');
break;
/* snip */
default:
console.log('All\'s good.');
}
但是,我会说坚持if..else
是一个更好,更容易理解的选项,在这种情况下:
if (numRegex.test(phoneVal)) {
console.log('Only digits please.');
return false;
} else if (alphaRegex.test(usernameVal)) {
console.log('Only alpha-numeric please.');
return false;
} else {
console.log('It\'s all good.');
return true;
}
答案 1 :(得分:0)
如果您只使用每个正则表达式,为什么不将它重构为一个三元组?
也许是这样的:
/^\S/.test($('#name').val()) !== true
? invalidEls.push('name:invalid')
: invalidEls.push('name:valid');
$('#phone').val().match(/^(1-?)?([2-9]\d{2}|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/)
? invalidEls.push('phone:valid')
: invalidEls.push('phone:invalid');
$('#email').val().match(/[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9]){1,}?/)
? invalidEls.push('email:valid')
: invalidEls.push('email:invalid');
答案 2 :(得分:0)
另一种类似的模式;
try {
if (!alphaRegex.test(usernameVal))
throw ('Only letters please.');
if (!numRegex.test(phoneVal))
throw ('Only digits please.');
...
return true;
} catch (e) {
console.log(e);
}