Проверка формы с помощью Yup, чтобы проверить, равны ли входные значения или нет

Мне нужно выполнить проверку формы с помощью Yup, чтобы проверить тип ввода email1, email2, email3, email4 и email5 в моем приложении React.

Эмпирическое правило простое. Убедитесь, что emails находится в допустимой форме и не может иметь одинаковых значений emails.

Я супер новичок в Ага. Итак, что я сделал:

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)
});

Проблема с этим методом заключается в том, что он также обнаружит ошибку дублирования писем, даже если введенный текст пуст. Как это исправить? Есть ли лучший способ реализовать?

Спасибо


person Arif Mustaffa    schedule 13.11.2019    source источник
comment
если этот ответ был для вас полезен, примите его   -  person Alexfrostwolf    schedule 19.12.2019


Ответы (1)


используйте notOneOf вместо oneOf

вы должны использовать в этой структуре


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
  )});
person Alexfrostwolf    schedule 13.11.2019
comment
Привет, @alexfrostwolf. Спасибо за предложения. Используя ваши решения, я все еще получаю ошибку дублирования писем, даже если вводимый текст пуст. Другие работают хорошо. Есть ли другой способ не обнаруживать ошибку в пустых полях. Помощь действительно ценится. - person Arif Mustaffa; 14.11.2019
comment
вы можете использовать, когда @ArifMustaffa - person Alexfrostwolf; 15.12.2019