有没有遇到过数组型验证?我遇到了,贴上解决方法.
下面的效果是周一到周天 有邮箱和电话的验证,因为支持多条数据(空格分隔)
<el-form
v-loading="loading"
ref="tableData"
:model="tableData"
:rules="rules"
label-position="right"
label-width="150px"
>
<!-- 周一 -->
<el-row :gutter="10">
<el-col :span="2" class="boldClass">
<el-form-item :label="this.$t('common.mon')">
</el-form-item>
</el-col>
<el-col :span="11">
<!-- 手机 -->
<el-form-item
:label="$t('register.phoneNumber')"
prop="week1.phoneStr">
<!-- <span slot="label">
<i class="el-icon-mobile-phone" style="margin-right:3px"> </i>{{ $t('register.phoneNumber') }}
</span> -->
<span> <el-input v-model="tableData.week1.phoneStr" :placeholder="this.$t('alarm.morePhoneTip')"></el-input></span>
</el-form-item>
</el-col>
<el-col :span="11">
<!-- 邮箱 -->
<el-form-item :label="$t('register.email')" prop="week1.emailStr">
<span> <el-input v-model="tableData.week1.emailStr" :placeholder="this.$t('alarm.moreEmailTip')"></el-input></span>
</el-form-item>
</el-col>
</el-row>
<div class="footer">
<el-button :loading="subloading" type="primary" style="width:220px;" @click="onSubmit">{{ $t('alarm.submit') }}</el-button>
</div>
</el-form>
data() {
var validateEmailStr = (rule, value, callback) => {
if (value.replace(/(^\s*)|(\s*$)/g, '') !== '') {
var emailArr = value.replace(/(^\s*)|(\s*$)/g, '').split(/\s+/)
emailArr.forEach((item, index) => {
if (!(/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/).test(item.replace(/(^\s*)|(\s*$)/g, ''))) {
callback(new Error(this.$t('alarm.emailWrong') + ' ' + item.replace(/(^\s*)|(\s*$)/g, '')))
}
if ((index + 1) == emailArr.length) {
callback()
}
})
} else {
callback()
}
}
var validatePhoneStr = (rule, value, callback) => {
if (value.replace(/(^\s*)|(\s*$)/g, '') !== '') {
var phoneArr = value.replace(/(^\s*)|(\s*$)/g, '').split(/\s+/)
phoneArr.forEach((item, index) => {
if (!(/^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$/).test(item.replace(/(^\s*)|(\s*$)/g, ''))) {
callback(new Error(this.$t('alarm.phoneWrong') + ' ' + item.replace(/(^\s*)|(\s*$)/g, '')))
}
if ((index + 1) == phoneArr.length) {
callback()
}
})
} else {
callback()
}
}
return {
subloading: false,
showDialog: false, // 是否弹出dialog
loading: false,
rules: {
'week1.emailStr': { required: false, validator: validateEmailStr, trigger: 'change' },
'week1.phoneStr': { required: false, validator: validatePhoneStr, trigger: 'change' },
'week2.emailStr': { required: false, validator: validateEmailStr, trigger: 'change' },
'week2.phoneStr': [{ required: false, validator: validatePhoneStr, trigger: 'change' }],
'week3.emailStr': [{ required: false, validator: validateEmailStr, trigger: 'change' }],
'week3.phoneStr': [{ required: false, validator: validatePhoneStr, trigger: 'change' }],
'week4.emailStr': [{ required: false, validator: validateEmailStr, trigger: 'change' }],
'week4.phoneStr': [{ required: false, validator: validatePhoneStr, trigger: 'change' }],
'week5.emailStr': [{ required: false, validator: validateEmailStr, trigger: 'change' }],
'week5.phoneStr': [{ required: false, validator: validatePhoneStr, trigger: 'change' }],
'week6.emailStr': [{ required: false, validator: validateEmailStr, trigger: 'change' }],
'week6.phoneStr': [{ required: false, validator: validatePhoneStr, trigger: 'change' }],
'week0.emailStr': [{ required: false, validator: validateEmailStr, trigger: 'change' }],
'week0.phoneStr': [{ required: false, validator: validatePhoneStr, trigger: 'change' }]
},
tableData: {
identification: undefined,
week0: {
phoneStr: '',
emailStr: '',
phone: [],
email: []
},
week1: {
phoneStr: '',
emailStr: '',
phone: [],
email: []
},
week2: {
phoneStr: '',
emailStr: '',
phone: [],
email: []
},
week3: {
phoneStr: '',
emailStr: '',
phone: [],
email: []
},
week4: {
phoneStr: '',
emailStr: '',
phone: [],
email: []
},
week5: {
phoneStr: '',
emailStr: '',
phone: [],
email: []
},
week6: {
phoneStr: '',
emailStr: '',
phone: [],
email: []
}
}
}
},
以下为效果