es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo validar una fecha utilizando Yup en caso de una entrada incorrecta de año de dos dígitos.

Estoy tratando de validar una fecha. El campo de entrada, que es un selector de fechas, podría tener el siguiente valor de entrada 05.01.20, que resulta en la fecha Dom Ene 05 0020 00:00:00 GMT+0053. Obviamente, este no es un valor de año útil, por lo que esperaría un mensaje de error por formato de entrada incorrecto (que debería ser YYYY en lugar de YY – en este ejemplo, 05.01.2020).

Este es mi intento, que funciona pero es un poco engañoso, ya que devuelve un valor booleano en la función transformadora. Supongo que este no es el método de validación correcto. También me gustaría añadir un valor mínimo de fecha (después de comprobar si el formato es válido). Si la fecha es anterior al 1 de enero de 2000, debería lanzar un error.

Yup.object().shape({
    birthday: Yup.date()
    .transform((value, originalValue) => {
        const year = originalValue.getFullYear() || 0
        return year > 2000 ? originalValue : false
    })
    .typeError('Formato incorrecto (DD.MM.AAAA)')
    .nullable()
    .required('Falta la fecha de nacimiento')
})
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para validar un campo de entrada de fecha con un selector de fecha, se puede utilizar el siguiente esquema Yup:

    Yup.object().shape({
      birthday: Yup.date()
        .nullable()
        .typeError('Formato incorrecto (DD.MM.AAAA)')
        .test('año-válido', 'Año inválido', function (value) {
          return value instanceof Date && !isNaN(value) && value.getFullYear() >= 2000;
        })
        .required('Se requiere la fecha de nacimiento')
    })
    

    La validación typeError se utiliza para mostrar un mensaje de error para un formato incorrecto, que en este caso es DD.MM.AAAA. La validación test se utiliza para comprobar si el valor del año es válido, que en este caso es cualquier año después de 2000. Si el valor del año es inferior a 2000 o la entrada no es una fecha válida, la validación fallará y se mostrará el mensaje de error “Año inválido”. La validación required se utiliza para asegurarse de que la entrada no esté vacía.

    Para limitar el valor mínimo de la fecha al 1 de enero de 2000, se puede agregar la siguiente validación min después de la validación test:

    .min(new Date(2000, 0, 1), 'La fecha debe ser posterior al 1 de enero de 2000')
    

    El esquema Yup final se verá así:

    Yup.object().shape({
      birthday: Yup.date()
        .nullable()
        .typeError('Formato incorrecto (DD.MM.AAAA)')
        .test('año-válido', 'Año inválido', function (value) {
          return value instanceof Date && !isNaN(value) && value.getFullYear() >= 2000;
        })
        .min(new Date(2000, 0, 1), 'La fecha debe ser posterior al 1 de enero de 2000')
        .required('Se requiere la fecha de nacimiento')
    })
    

    Este esquema validará el campo de entrada de fecha para obtener el formato correcto, un valor de año válido y un valor de fecha mínimo. Si alguna de estas validaciones falla, se mostrará un mensaje de error.

Comments are closed.