Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

[Sugerencia] Desafío 02: Regex o Arrays para validar entrada?

Implementé los 5 desafíos adicionales de lógica de programación aplicando validaciones. Quiero compartir las técnicas de validación que utilicé y abrir el debate sobre mejores enfoques.

Desafíos Implementados

Desafío 02.1 - Validación de Días de la Semana

Reto: Verificar que el usuario ingrese un día válido

function esDiaValido(dia) {
    if (!esTextoValido(dia)) return false;
    
    const diasValidos = ['lunes', 'martes', 'miércoles', 'miercoles', 
                         'jueves', 'viernes', 'sábado', 'sabado', 'domingo'];
    return diasValidos.includes(dia.toLowerCase().trim());
}

Decisiones de diseño:

  • Soporte para acentos y sin acentos (miércoles / miercoles)
  • Case-insensitive y trim automático
  • Array centralizado para fácil mantenimiento

¿Qué opinan? ¿Debería usar regex o esta aproximación con arrays es más legible?


Desafío 02.2 - Validación de Números

Reto: Distinguir entre números positivos, negativos y cero

function esNumeroValido(numero) {
    if (!esTextoValido(numero)) return false;
    
    const numeroNum = parseFloat(numero);
    return !isNaN(numeroNum) && isFinite(numeroNum);
}

Decisiones de diseño:

  • Soporte para enteros y decimales
  • Validación con isFinite() para rechazar Infinity
  • parseFloat() en lugar de parseInt() para decimales

Pregunta para debate: ¿Es mejor ser estricto con solo enteros o permitir decimales? ¿parseFloat vs Number()?


Desafío 02.3 - Validación de Puntuación

Reto: Validar puntuación de juego en rango específico

function esPuntuacionValida(puntuacion) {
    if (!esTextoValido(puntuacion)) return false;
    
    const puntuacionNum = parseFloat(puntuacion);
    return !isNaN(puntuacionNum) && puntuacionNum >= 0 && puntuacionNum <= 1000;
}

** Decisiones de diseño:**

  • Rango lógico (0-1000) para puntuaciones de juego
  • Permite decimales (¿puntuaciones fraccionarias?)
  • Validación explícita de límites

¿Controversial? ¿Deberían las puntuaciones de juegos ser solo enteros? ¿Rango 0-1000 o 0-100?


Desafío 02.5 - Validación de Nombres

Reto: Validar nombres con caracteres especiales del español

function esNombreValido(nombre) {
    if (!esTextoValido(nombre)) return false;
    
    const nombreLimpio = nombre.trim();
    const regex = /^[a-zA-ZáéíóúÁÉÍÓÚñÑ\s]{2,50}$/;
    return regex.test(nombreLimpio);
}

Decisiones de diseño:

  • Soporte completo para acentos españoles
  • Longitud mínima (2) y máxima (50)
  • Solo letras y espacios (sin números ni símbolos)

Debate cultural: ¿Es correcto limitar a solo caracteres latinos? ¿Qué pasa con nombres de otras culturas?


1 respuesta

¡Hola Darwin!

Gracias por compartir tus implementaciones y abrir el debate sobre las técnicas de validación que utilizaste. Vamos a analizar cada uno de los desafíos que mencionaste.

Desafío 02.1 - Validación de Días de la Semana

Tu enfoque de usar un array para validar los días de la semana es bastante claro y fácil de mantener. La ventaja de esta aproximación es su legibilidad y simplicidad. Usar regex podría hacer la validación más compacta, pero a menudo puede ser menos legible para quienes no están familiarizados con las expresiones regulares. En este caso, creo que tu método es muy apropiado, especialmente porque permite fácilmente la inclusión de variaciones con y sin acentos.

Desafío 02.2 - Validación de Números

Usar parseFloat() es una buena elección si deseas permitir tanto enteros como decimales. Number() podría ser una alternativa si deseas manejar conversiones más generales, pero parseFloat() es más específico para números decimales. La decisión entre permitir solo enteros o también decimales depende del contexto de tu aplicación. Si no hay una razón específica para restringir a enteros, permitir decimales da más flexibilidad al usuario.

Desafío 02.3 - Validación de Puntuación

Permitir puntuaciones decimales puede ser útil si el juego tiene un sistema de puntuación que lo justifique. Sin embargo, si el juego solo utiliza puntuaciones enteras, podrías considerar restringirlo a enteros. El rango de 0-1000 parece razonable, pero nuevamente, esto depende del contexto del juego. Si el juego tiene una escala más pequeña, ajustar el rango a 0-100 podría ser más adecuado.

Desafío 02.5 - Validación de Nombres

Tu regex para validar nombres es bastante completa para nombres en español. Sin embargo, como mencionas, esto podría excluir nombres de otras culturas. Si tu aplicación necesita ser inclusiva de nombres internacionales, podrías considerar expandir la regex o permitir caracteres adicionales que puedan aparecer en nombres de otras culturas.

En resumen, tus implementaciones son sólidas y están bien pensadas. La elección entre usar arrays o regex depende mucho del contexto y de quién mantendrá el código en el futuro. A menudo, la legibilidad y el mantenimiento son tan importantes como la eficiencia.

Espero haber ayudado y buenos estudios!