[英]Form Validation using Yup to check whether inputs value is equal or not
I need to make a form validation using Yup to check input type email1
, email2
, email3
, email4
and email5
in my React App.我需要使用 Yup 进行表单验证,以检查我的 React 应用程序中的输入类型
email1
、 email2
、 email3
、 email4
和email5
。
The rule of thumb is easy.经验法则很简单。 Check those
emails
is in valid form and cannot have similar emails
values.检查这些
emails
的格式是否有效,并且不能有类似的emails
值。
I am super new to Yup.我对是的超级新手。 So what I did is:
所以我所做的是:
const message = 'Duplicate emails not allowed';
const incorrect = 'Incorrect email format';
const Schema = Yup.object().shape({
email1: Yup.string()
.email(incorrect)
.oneOf([Yup.ref('email2'), null], message)
.oneOf([Yup.ref('email3'), null], message)
.oneOf([Yup.ref('email4'), null], message)
.oneOf([Yup.ref('email5'), null], message),
email2: Yup.string()
.email(incorrect)
.oneOf([Yup.ref('email1'), null], message)
.oneOf([Yup.ref('email3'), null], message)
.oneOf([Yup.ref('email4'), null], message)
.oneOf([Yup.ref('email5'), null], message),
email3: Yup.string()
.email(incorrect)
.oneOf([Yup.ref('email1'), null], message)
.oneOf([Yup.ref('email2'), null], message)
.oneOf([Yup.ref('email4'), null], message)
.oneOf([Yup.ref('email5'), null], message),
email4: Yup.string()
.email(incorrect)
.oneOf([Yup.ref('email1'), null], message)
.oneOf([Yup.ref('email2'), null], message)
.oneOf([Yup.ref('email3'), null], message)
.oneOf([Yup.ref('email5'), null], message),
email5: Yup.string()
.email(incorrect)
.oneOf([Yup.ref('email1'), null], message)
.oneOf([Yup.ref('email2'), null], message)
.oneOf([Yup.ref('email3'), null], message)
.oneOf([Yup.ref('email4'), null], message)
});
The issue with this method is, it will also detect an error of duplicate emails even the input text is empty.这种方法的问题是,即使输入文本为空,它也会检测到重复电子邮件的错误。 How do I fix this?
我该如何解决? Is there any better way that I could implement?
有没有更好的方法可以实现?
Thanks谢谢
you must use in this structure你必须在这个结构中使用
const ValidationSchema=Yup.object().shape({email1: Yup.string().email(this.incorrect)
.notOneOf(
[
Yup.ref('email2'),
Yup.ref('email3'),
Yup.ref('email4'),
Yup.ref('email5')
],
this.message
),
email2: Yup.string()
.email(this.incorrect)
.notOneOf(
[
Yup.ref('email1'),
Yup.ref('email3'),
Yup.ref('email4'),
Yup.ref('email5')
],
this.message
),
email3: Yup.string()
.email(this.incorrect)
.notOneOf(
[
Yup.ref('email1'),
Yup.ref('email2'),
Yup.ref('email4'),
Yup.ref('email5')
],
this.message
),
email4: Yup.string()
.email(this.incorrect)
.notOneOf(
[
Yup.ref('email1'),
Yup.ref('email2'),
Yup.ref('email3'),
Yup.ref('email5')
],
this.message
),
email5: Yup.string()
.email(this.incorrect)
.notOneOf(
[
Yup.ref('email1'),
Yup.ref('email2'),
Yup.ref('email3'),
Yup.ref('email4')
],
this.message
)});
Using notOneOf worked for me.使用 notOneOf 对我有用。 However, I compared only two strings.
但是,我只比较了两个字符串。 Comparing multiple in your case may be more complex
在您的情况下比较多个可能会更复杂
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.