以下函数使用JavaScript的every
方法来检查所有字段的有效性的一种形式:validateForm功能
// Input:
validatingFields: [{
name: 'Name',
type: 'text',
validation: {
isRequired: true,
pattern: util.regex().email,
minLength: 2
maxLength: 4
}
}]
// Function:
validateForm() {
this.isValid = this.validatingFields.every(field => {
const isRequired = field.validation.isRequired
const maxLength = field.validation.maxLength
const minLength = field.validation.minLength
const pattern = field.validation.pattern
const match = field.validation.match
if (match) {
const matchRegex = this.convertToRegex(match)
return matchRegex.test(field.value)
}
if (pattern) {
return pattern.test(field.value)
}
if (minLength) {
return field.value.length >= minLength
}
if (maxLength) return field.value.length <= maxLength
if (isRequired) return field.value
return true
})
}
的问题是,每if
语句中的函数返回。因此,例如,当存在minLength
时,从不检查maxLength
。
如何修改该函数以验证每个条件?
感谢您的建议,但是这样,无论前面的条件如何发生,if(tValid && isRequired)tValid = field.value'都会将'tValid'设置为'true'。 – alex
@alex:这是怎么回事?只有tValid首先是真的才会被检查。 – Lain
'tValid'在前面的条件中可能变成'false',但是由于'isRequired'设置为'true',所以'if(tValid && isRequired)tValid = !! field.value'中最后变成'true'。 – alex