Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

371
Vistas
Validando un campo de número no requerido con Yup

Estoy tratando de validar un campo numérico que es opcional y, por lo tanto, puede estar vacío. Si hay un valor en el campo, debe ser un número positivo.

 const schema = yup.object().shape({ gpa: yup.number() .when('gpa', { is: (value) => value?.length > 0, then: yup.number().positive(numberPositiveMessage).typeError(numberMessage), otherwise: yup.number().notRequired().nullable(true).transform(value => (isNaN(value) ? undefined : value)) }, [ ['gpa', 'gpa'], ] );

Permite que el resto del formulario se valide cuando el campo está vacío y cuando hay un número positivo allí, pero si ingreso un número negativo o una cadena, no arroja ningún error como debería.

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Evite usar required() para que el campo sea opcional. Solo se validaría si estuviera presente.

 gpa: yup .number() .positive() .nullable(true) .transform((_, val) => val === val ? val : null) // transform NaN to null

about 4 years ago · Juan Pablo Isaza Denunciar

0

Para la próxima persona que termine aquí tratando de hacer lo mismo, esto funciona para números positivos que pueden ser 0, nulo, indefinido o una cadena vacía, pero no cualquier otra cadena o número negativo:

 const schema = yup.object().shape({ gpa: yup.number() .typeError("GPA must be a number") .nullable() .moreThan(0, "Floor area cannot be negative") .transform((_, val) => (val !== "" ? Number(val) : null)), } );

La conversión de números desencadena un error de tipo en una cadena que le dará el error definido en .typeError() y usar .moreThan() en lugar de .positive() le permite tener cero (cambie a .positive() si no lo tiene). no quiero permitir 0).

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda