Hay una tarea: El campo "Nombre Apellido" solo puede constar de 2 palabras (nombre y apellido). La longitud mínima de cada palabra es de 3 caracteres, 30 como máximo. Solo hay 1 espacio entre palabras.
El problema es que después de la primera palabra, cuando pones un espacio, ya devuelve verdadero. ¿Por qué? ¿Y cómo verificar el 1 espacio en esta entrada?
const validateInput = (value) => { const lengthValue = value.split(' ').length if (lengthValue !== 2) { return false } else { return value.split(' ').filter(el => el.length > 3 && el.length <= 30) ? value.search(/[A-Za-z]+(\s+[A-Za-z]+)?/gi) !== -1 ? true : false : '' } }También lea esto para conocer las futuras falsedades que los programadores creen sobre los nombres.
const re = /[A-Za-z]{3,30}/; const validateInput = (value) => { const val = value.trim(); if (val === "") return false; const arr = value.split(' '); if (arr.length != 2) return false; const [firstName, lastName] = arr; return re.test(firstName) && re.test(lastName); // we could use .every here but you only have two } console.log(validateInput("Hans Anders")); console.log(validateInput("Prince")); console.log(validateInput("X Æ A-12")); console.log(validateInput(" A "));Puede verificar si el no. de palabras son menos de dos y la longitud de todas las palabras se encuentra dentro del rango especificado.
const message = document.querySelector("small"); document.querySelector("input").addEventListener("keyup", (e) => { const isValid = validateInput(e.target.value); if (isValid) { message.textContent = "Valid input"; } else { message.textContent = "Invalid input"; } }); const validateInput = (input) => { const words = input.split(" "); return words.length <= 2 && words.every((w) => /^[A-Za-z]{3,30}$/.test(w)); }; <div> <label> Name: <input type="text" /> </label> </div> <small>Invalid input</small>