亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Formik & Yup:如何驗證提供的日期是否為 18 歲?

Formik & Yup:如何驗證提供的日期是否為 18 歲?

蝴蝶刀刀 2023-05-25 18:15:42
我正在處理一個由 Formik、Yup 和 ReactJS 制作的表單。在日期字段中,我試圖驗證用戶是否年滿 18 歲。我在 Formik 中通過了以下作為 validationSchema 參數:import differenceInYears from "date-fns/differenceInYears";.........    dob: Yup.date()              .nullable()              .test("dob", "Should be greater than 18", function (value) {                return differenceInYears(value, new Date()) >= 18;              }),formik 輸入字段的名稱是dob. 但即使我輸入 18 歲的有效日期,它也會顯示驗證錯誤。那么,如何正確驗證它呢?
查看完整描述

3 回答

?
牧羊人nacy

TA貢獻1862條經驗 獲得超7個贊

您需要交換日期參數:

differenceInYears(new?Date(),?new?Date(value))?>=?18;

如果您檢查 date-fns,第一個參數應該是較晚的日期。

您還需要將字段值解析為Date.


查看完整回答
反對 回復 2023-05-25
?
蕪湖不蕪

TA貢獻1796條經驗 獲得超7個贊

因此,如果您想在不添加 date-fns 插件的情況下執行此操作并且不想使用 mgic 天數,那么您可以執行類似的操作。


dob: Yup.date().nullable()

        .test('dob', 'Should be greater than 18', function (value, ctx) {

          const dob = new Date(value);

          const validDate = new Date();

          const valid = validDate.getFullYear() - dob.getFullYear() >= 18;

          return !valid ? ctx.createError() : valid; 

        })

        .required('Required'),


查看完整回答
反對 回復 2023-05-25
?
慕尼黑的夜晚無繁華

TA貢獻1864條經驗 獲得超6個贊

我的解決方案:



import React from "react";

import { Formik, Form, Field } from "formik";

import * as Yup from "yup";

import s from "./Registration.module.css";


const SignupSchema = Yup.object().shape({

  firstName: Yup.string().required("Required"),

  lastName: Yup.string().required("Required"),

  birthdate: Yup.date()

    .max(new Date(Date.now() - 567648000000), "You must be at least 18 years")

    .required("Required"),

  password: Yup.string()

    .min(4, "Too Short!")

    .max(50, "Too Long!")

    .required("Required"),

  email: Yup.string().email("Invalid email").required("Required"),

});


export const RegistrationForm = () => (

  <div className={s.mainLoginForm}>

    <h1>Sign up</h1>

    <Formik

      initialValues={{

        firstName: "",

        lastName: "",

        email: "",

        password: "",

        birthdate: "",

      }}

      validationSchema={SignupSchema}

      onSubmit={(values) => {

        // same shape as initial values

        console.log(values);

      }}

    >

      {({ errors, touched }) => (

        <Form>

          <div className={s.inputsFlex}>

            <Field

              className={s.regInput}

              placeholder="email"

              name="email"

              type="email"

            />

            {errors.email && touched.email ? (

              <div className={s.formControl}>{errors.email}</div>

            ) : null}

            <Field

              className={s.regInput}

              placeholder="password"

              name="password"

              type="password"

            />

            {errors.password && touched.password ? (

              <div className={s.formControl}>{errors.password}</div>

            ) : null}

            <Field

              className={s.regInput}

              placeholder="firstName"

              name="firstName"

            />

            {errors.firstName && touched.firstName ? (

              <div className={s.formControl}>{errors.firstName}</div>

            ) : null}

            <Field

              className={s.regInput}

              placeholder="lastName"

              name="lastName"

            />

            {errors.lastName && touched.lastName ? (

              <div className={s.formControl}>{errors.lastName}</div>

            ) : null}

            <Field className={s.regInput} name="birthdate" type="date" />

            {errors.birthdate && touched.birthdate ? (

              <div className={s.formControl}>{errors.birthdate}</div>

            ) : null}

            <button className={s.regBtn} type="submit">

              Sign up

            </button>

          </div>

        </Form>

      )}

    </Formik>

  </div>

);



您可以為閏年(閏年)添加 4 天 86 400 000 * 4 = 345 600 000


查看完整回答
反對 回復 2023-05-25
  • 3 回答
  • 0 關注
  • 186 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號