我写了一个验证表格的功能。我使用every
方法确保传递所有条件。如果该字段无效,则返回虚假值并将其名称推送到invalidFields
数组。如果一切顺利,函数将返回true
:
validateForm () {
this.isValid = this.validatingFields.every(field => {
const pattern = field.validation.pattern
const match = field.validation.match
if (match) {
const matchRegex = this.convertToRegex(match)
if (!matchRegex.test(field.value)) this.invalidFields.push(field.name)
return matchRegex.test(field.value)
}
if (pattern) {
if (pattern.test(field.value)) this.invalidFields.push(field.name)
return pattern.test(field.value)
}
return true
})
}
但是你可以看到我必须在每个if语句中做this.invalidFields.push(field.name)
。有没有办法避免这种重复?
编辑:输入如下:
validatingFields: [{
name: 'name',
type: 'text',
value: '',
validation: {
required: true
}
}, {
name: 'company',
type: 'text',
value: '',
validation: {
// pattern: util.regex().email
match: 'name'
// minLength: 2,
// maxLength: 4
}
答案 0 :(得分:1)
好吧,如果您只是将两个案例放入一个带有额外OR
的if语句:
validateForm() {
this.isValid = this.validatingFields.every(field => {
const pattern = field.validation.pattern
const match = field.validation.match
if ((match && !this.convertToRegex(match).test(field.value)) || (pattern && pattern.test(field.value))) {
this.invalidFields.push(field.name)
return match ? this.convertToRegex(match).test(field.value)) : pattern.test(field.value)
}
return true
})
}
但它绝对不易维护的代码。所以我个人认为没有理由这样做。