Проверка адреса электронной почты через запятую с использованием Yup

Я пытаюсь написать схему проверки в Yup для адресов электронной почты, разделенных запятыми.

Пока что я создал настраиваемую функцию проверки и добавил ее в свою схему. Он помещает пользовательский ввод, разделенный запятыми, в массив ... я хочу проверить каждое из этих писем в массиве, используя встроенный Yup.string().email().

function invalidEmails(this: Yup.StringSchema, msg: string) {
    return this.test({
        name: "invalidEmails",
        message: msg,
        test: (value) => {
            // push email into emails array
            const emails = value.replace(/\s/g, "").split(",");
            emails.forEach((email: any) => {
                // I want to run the Yup.string().email() validation for each email
            });
        },
    });
}

Добавьте настраиваемую функцию в addMethod

Yup.addMethod(Yup.string, "invalidEmails", invalidEmails);

Наконец, добавьте его в схему Yup:

<Formik
    initialValues={{
        emails: ""
    }}
    validateOnBlur={true}
    validationSchema={Yup.object().shape({
        emails:
            Yup.string().checkEmails("One or more email is not valid"),
    })}
    render={(formikProps: any) => (
        <Form>
            <input name="emails" /> // email field
        </Form>
    )}
/>

person blankface    schedule 17.09.2019    source источник
comment
См. Это (что-то для рассмотрения) github.com/jquense/yup/issues/507   -  person Hassan Voyeau    schedule 17.09.2019
comment
См. Мой обновленный ответ, дайте мне знать, если вам понадобится дополнительная помощь.   -  person Hassan Voyeau    schedule 17.09.2019
comment
Привет. Помог ли вам мой ответ ниже?   -  person Hassan Voyeau    schedule 22.09.2019
comment
См. github.com/jquense/yup/issues/564.   -  person Thirumalai Chellam Balagopalan    schedule 12.07.2021


Ответы (1)


Чтобы проверить отдельную электронную почту автономно, код выглядит следующим образом, вы можете изменить его, чтобы он соответствовал вашей функции.

let schema = Yup.string().email();
let result = schema.isValidSync("[email protected]"); // isValidSync returns boolean

Мне пришлось столкнуться с приведенной ниже ошибкой, прежде чем я обнаружил, что есть isValid и isValidSync

Ошибка синтаксического анализа: нельзя использовать ключевое слово 'await' вне асинхронной функции

person Hassan Voyeau    schedule 17.09.2019