Yup'i yükleyin:
npm install yup
Temel şema tanımı ve doğrulama:
import * as Yup from 'yup';
const schema = Yup.object().shape({
name: Yup.string().required('İsim gereklidir'),
email: Yup.string().email('Geçersiz e-posta').required('E-posta gereklidir'),
age: Yup.number().positive().integer().required('Yaş gereklidir')
});
// Doğrula
schema.validate({ name: 'John', email: 'john@example.com', age: 30 })
.then(() => console.log('Geçerli'))
.catch(error => console.log('Hata', error.errors));
Çeşitli string doğrulama yöntemleri:
const stringSchema = Yup.object().shape({
username: Yup.string()
.min(3, 'Kullanıcı adı en az 3 karakter olmalıdır')
.max(20, 'Kullanıcı adı en fazla 20 karakter olmalıdır')
.matches(/^[a-zA-Z0-9]+$/, 'Kullanıcı adı yalnızca alfasayısal karakterler içerebilir')
.required('Kullanıcı adı gereklidir'),
email: Yup.string()
.email('Geçersiz e-posta adresi')
.required('E-posta gereklidir'),
password: Yup.string()
.min(8, 'Şifre en az 8 karakter olmalıdır')
.matches(/[a-zA-Z]/, 'Şifre en az bir harf içermelidir')
.matches(/[0-9]/, 'Şifre en az bir rakam içermelidir')
.required('Şifre gereklidir'),
url: Yup.string()
.url('Geçersiz URL')
});
Sayı doğrulama yöntemleri:
const numberSchema = Yup.object().shape({
age: Yup.number()
.positive('Yaş pozitif bir sayı olmalıdır')
.integer('Yaş bir tam sayı olmalıdır')
.min(18, 'En az 18 yaşında olmalısınız')
.max(100, 'En fazla 100 yaşında olmalısınız')
.required('Yaş gereklidir'),
price: Yup.number()
.positive('Fiyat pozitif olmalıdır')
.round('ceil')
.moreThan(0, 'Fiyat 0'dan büyük olmalıdır')
.lessThan(1000000, 'Fiyat 1,000,000'dan küçük olmalıdır')
});
Boolean doğrulama:
const booleanSchema = Yup.object().shape({
acceptTerms: Yup.boolean()
.oneOf([true], 'Şartları ve koşulları kabul etmelisiniz')
.required('Şartları ve koşulları kabul etmelisiniz'),
subscribeNewsletter: Yup.boolean()
});
Tarih doğrulama yöntemleri:
const dateSchema = Yup.object().shape({
birthDate: Yup.date()
.max(new Date(), 'Doğum tarihi gelecekte olamaz')
.required('Doğum tarihi gereklidir'),
appointmentDate: Yup.date()
.min(new Date(), 'Randevu tarihi gelecekte olmalıdır')
.required('Randevu tarihi gereklidir')
});
Dizi doğrulama yöntemleri:
const arraySchema = Yup.object().shape({
friends: Yup.array()
.of(Yup.string())
.min(1, 'En az bir arkadaşınız olmalıdır')
.max(5, 'En fazla 5 arkadaşınız olabilir'),
scores: Yup.array()
.of(Yup.number().positive().integer())
.min(3, 'En az 3 puanınız olmalıdır')
.required('Puanlar gereklidir')
});
İç içe geçmiş nesne doğrulama:
const objectSchema = Yup.object().shape({
user: Yup.object().shape({
name: Yup.string().required('İsim gereklidir'),
email: Yup.string().email('Geçersiz e-posta').required('E-posta gereklidir')
}),
address: Yup.object().shape({
street: Yup.string().required('Sokak adı gereklidir'),
city: Yup.string().required('Şehir adı gereklidir'),
zipCode: Yup.string().matches(/^d{5}$/, 'Geçersiz posta kodu')
})
});
Özel doğrulama kuralları oluşturma:
const customSchema = Yup.object().shape({
username: Yup.string()
.test('is-unique', 'Kullanıcı adı zaten alınmış', async (value) => {
// Kullanıcı adı benzersizliğini kontrol etmek için API çağrısını simüle et
const isUnique = await checkUsernameUniqueness(value);
return isUnique;
}),
password: Yup.string()
.test('is-strong', 'Şifre yeterince güçlü değil', (value) => {
// Özel şifre güç testi
return /^(?=.*[a-z])(?=.*[A-Z])(?=.*d)(?=.*[@$!%*?&])[A-Za-zd@$!%*?&]{8,}$/.test(value);
})
});
Koşullu doğrulama uygulama:
const conditionalSchema = Yup.object().shape({
isEmployed: Yup.boolean(),
companyName: Yup.string().when('isEmployed', {
is: true,
then: Yup.string().required('Çalışan olduğunuzda şirket adı gereklidir'),
otherwise: Yup.string()
}),
phoneType: Yup.string().oneOf(['mobile', 'home']),
phoneNumber: Yup.string().when('phoneType', {
is: 'mobile',
then: Yup.string().matches(/^d{10}$/, 'Geçerli bir 10 haneli mobil numara olmalıdır'),
otherwise: Yup.string().matches(/^d{7}$/, 'Geçerli bir 7 haneli ev numarası olmalıdır')
})
});
Doğrulama hatalarını yönetme:
const schema = Yup.object().shape({
name: Yup.string().required('İsim gereklidir'),
email: Yup.string().email('Geçersiz e-posta').required('E-posta gereklidir')
});
try {
await schema.validate({ name: '', email: 'invalid' }, { abortEarly: false });
} catch (error) {
if (error instanceof Yup.ValidationError) {
const errorMessages = {};
error.inner.forEach((err) => {
errorMessages[err.path] = err.message;
});
console.log('Doğrulama hataları:', errorMessages);
}
}
Yup'i React Hook Form ile kullanma:
import React from 'react';
import { useForm } from 'react-hook-form';
import { yupResolver } from '@hookform/resolvers/yup';
import * as Yup from 'yup';
const schema = Yup.object().shape({
name: Yup.string().required('İsim gereklidir'),
email: Yup.string().email('Geçersiz e-posta').required('E-posta gereklidir')
});
function Form() {
const { register, handleSubmit, formState: { errors } } = useForm({
resolver: yupResolver(schema)
});
const onSubmit = (data) => console.log(data);
return (
<form onSubmit={handleSubmit(onSubmit)}>
<input {...register("name")} />
{errors.name && <p>{errors.name.message}</p>}
<input {...register("email")} />
{errors.email && <p>{errors.email.message}</p>}
<input type="submit" />
</form>
);
}
2024 © Tüm hakları saklıdır - buraxta.com