我正在做一个赋值工作,我很清楚if语句和switch语句。我有这样一串代码:
if (testLength(document.forms[0].lname) == false) {
isValid = false;
}
if (testLength(document.forms[0].fname) == false) {
isValid = false;
}
if (testLength(document.forms[0].address) == false) {
isValid = false;
}
if (testLength(document.forms[0].summary) == false) {
isValid = false;
}
if (testPattern(document.forms[0].account, /^ACT\d{6}$/) == false) {
isValid = false;
}
if (testPattern(document.forms[0].department, /^DEPT\d{3}$/) == false) {
isValid = false;
}
if (testPattern(document.forms[0].project, /^PROJ\d{5}$/) == false) {
isValid = false;
}
if (testPattern(document.forms[0].ssn, /^\d{3}-\d{2}-\d{4}$|\d{9}$/) == false) {
isValid == false;
}有没有办法简化一串像这样的if语句,如果它们都是相关的。我试着想出不同的方法来进行转换,但我认为这是不可能的。这可能是最优雅的解决方案?
发布于 2018-11-19 03:26:34
假设你首先有了isValid = true,你可以这样做:
var form = document.forms[0];
var props = ["lname", "fname", "address", "summary"];
var isValid = props.every(prop => testLength(form[prop]))
&& testPattern(form.account, /^ACT\d{6}$/)
&& testPattern(form.department, /^DEPT\d{3}$/)
&& testPattern(form.project, /^PROJ\d{5}$/)
&& testPattern(form.ssn, /^\d{3}-\d{2}-\d{4}$|\d{9}$/); 您还可以将预定义的数组方法应用于模式,如下所示:
var form = document.forms[0];
var props = ["lname", "fname", "address", "summary"];
var patts = [["account", /^ACT\d{6}$/], ["department", /^DEPT\d{3}$/],
["project", /^PROJ\d{5}$/], ["ssn", /^\d{3}-\d{2}-\d{4}$|\d{9}$/]];
var isValid = props.every(prop => testLength(form[prop]))
&& patts.every(([prop, regex]) => testPattern(form[prop], regex));这个想法是你只需要初始化form,props和patts变量一次,而不是每次你需要执行验证,尽管这不是一个问题,如果你这样做。
发布于 2018-11-19 03:29:05
你可以使用一个数组作为回调,并使用boolean进行检查。
isValid = [
testLength(document.forms[0].lname),
testLength(document.forms[0].fname),
testLength(document.forms[0].address),
testLength(document.forms[0].summary),
testPattern(document.forms[0].account, /^ACT\d{6}$/),
testPattern(document.forms[0].department, /^DEPT\d{3}$/),
testPattern(document.forms[0].project, /^PROJ\d{5}$/),
testPattern(document.forms[0].ssn, /^\d{3}-\d{2}-\d{4}$|\d{9}$/)
].every(Boolean);另一种方法是使用属性名称数组,并使用两个数组进行检查。
var keys = ['name', 'fname', 'address', 'summary'],
patterns = [
['account', /^ACT\d{6}$/],
['department', /^DEPT\d{3}$/],
['project', /^PROJ\d{5}$/],
['ssn', /^\d{3}-\d{2}-\d{4}$|\d{9}$/]
],
isValid = keys.every(k => testLength(document.forms[0][k]))
&& patterns.every((k, p) => testPattern(document.forms[0][k], p));发布于 2018-11-19 03:34:48
假设每个值都是布尔值,您可以对布尔值执行逻辑&&。
var isValid = testLength(document.forms[0].lname) &&
testLength(document.forms[0].fname &&
.....
testPattern(document.forms[0].ssn, /^\d{3}-\d{2}-\d{4}$|\d{9}$/);https://stackoverflow.com/questions/53364614
复制相似问题