Element Plus предоставляет мощный механизм валидации форм с
использованием el-form и
el-form-item. Валидация строится на основе
набора правил (rules), которые задаются в
форме и применяются к конкретным полям.
Правило валидации — это объект с ключевыми свойствами:
required — обязательное ли поле.message — сообщение, которое будет
отображено при нарушении правила.trigger — событие, при котором
выполняется проверка (blur, change и
др.).type — тип данных, поддерживаются:
string, number, array,
boolean, email, url,
date, object.validator — кастомная функция
валидации.Пример базового правила:
const rules = {
username: [
{ required: true, message: 'Введите имя пользователя', trigger: 'blur' },
{ min: 3, max: 12, message: 'Длина должна быть от 3 до 12 символов', trigger: 'blur' }
],
email: [
{ required: true, message: 'Введите email', trigger: 'blur' },
{ type: 'email', message: 'Некорректный формат email', trigger: 'blur' }
]
};
Форма создается через компонент
el-form, а каждое поле — через
el-form-item, к которому привязываются
правила через атрибут prop.
<el-form :model="form" :rules="rules" ref="formRef">
<el-form-item label="Имя" prop="username">
<el-input v-model="form.username"></el-input>
</el-form-item>
<el-form-item label="Email" prop="email">
<el-input v-model="form.email"></el-input>
</el-form-item>
<el-button type="primary" @click="submitForm">Отправить</el-button>
</el-form>
В Jav * aScript:
const form = reactive({
username: '',
email: ''
});
const formRef = ref(null);
const submitForm = () => {
formRef.value.validate((valid) => {
if (valid) {
console.log('Форма корректна', form);
} else {
console.log('Ошибка валидации');
return false;
}
});
};
Иногда встроенные правила не покрывают все сценарии. Для этого
используется функция validator. Она
принимает три аргумента: rule, value,
callback.
Пример проверки пароля на сложность:
const rules = {
password: [
{
required: true,
message: 'Введите пароль',
trigger: 'blur'
},
{
validator: (rule, value, callback) => {
const strongPassword = /^(?=.*[A-Z])(?=.*[a-z])(?=.*\d).{8,}$/;
if (!strongPassword.test(value)) {
callback(new Error('Пароль должен содержать минимум 8 символов, включая заглавные буквы и цифры'));
} else {
callback();
}
},
trigger: 'blur'
}
]
};
Element Plus поддерживает асинхронные проверки. В
validator можно возвращать промис, что позволяет, например,
проверять уникальность имени пользователя через API.
{
validator: (rule, value) => {
return new Promise((resolve, reject) => {
axios.get(`/api/check-username?username=${value}`)
.then(res => {
if (res.data.available) resolve();
else reject('Имя уже занято');
})
.catch(() => reject('Ошибка проверки'));
});
},
trigger: 'blur'
}
blur — проверка при потере
фокуса.change — проверка при изменении
значения поля.submit — можно инициировать через
validate для всей формы.Для сложных форм, где есть массивы или вложенные объекты,
используется точное указание пути через точку (.) или
скобки ([]):
const rules = {
'addresses[0].city': [
{ required: true, message: 'Город обязателен', trigger: 'blur' }
],
'profile.age': [
{ type: 'number', min: 18, message: 'Возраст должен быть не менее 18', trigger: 'blur' }
]
};
validate(callback) — проверяет всю
форму.validateField(prop, callback) —
проверяет конкретное поле.resetFields() — сбрасывает форму и
ошибки валидации.clearValidate(props?) — очищает ошибки
одного или нескольких полей.Пример очистки ошибок:
formRef.value.clearValidate('username'); // только поле username
formRef.value.clearValidate(); // все поля
trigger для оптимизации
UX: blur для текстовых полей, change для
селектов и чекбоксов.callback() или возвращать промис, иначе
валидация будет бесконечно «висеть».prop, чтобы ошибки привязывались к
конкретному элементу массива.Эти механизмы позволяют создавать гибкую, точную и масштабируемую валидацию форм с минимальными усилиями и высокой надежностью.