简体   繁体   中英

Yup validation - check if value doesn't match other field

Hi I am trying to find a way to compare 2 fields and validate only if they are not equal.

This is the only idea I was able to come up with but it doesn't work:

yup
    .number()
    .required()
    .notOneOf(
      [FormField.houseHoldMembers as any],
      'error message',
    ),

You can compare the two values and validate only if they are not equal like this:

const mySchema = yup.object({
  text1: yup.number().required(),
  text2: yup
    .number()
    .required()
    .when(["text1"], (text1, schema) => {
      console.log(schema);
      return schema.notOneOf([text1], "the two values should not be equal");
    })
});

You can take a look at this sandbox for a live working example of this solution.

Shorted:

const schema = yup.object({
   field1: yup.number().required(),
   field2: yup
     .number()
     .required()
     .notOneOf([yup.ref('field1'), null], 'The two values should not be equal'),
});

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM