hola,
Tengo una entrada para ingresar el año para la fecha de vencimiento de la tarjeta de crédito. ¿Cómo puedo validar esta entrada para un año de 4 dígitos no válido y debería aceptar solo 4 dígitos en el cambio y debería ser igual o mayor que el año actual?
const [year, setYear] = useState(''); function onSubmit(e) { e.preventDefault(); dispatch( addPayment({ card_holder: name, card_number: creditCardNo, expiration_month: month, expiration_year: year, card_type: creditCardType, cvc: cvv, }), ); setCreditCardNo(''); setName(''); setCVV(''); setMonth(''); setYear(''); } <div className={styles.sizeExtraSmall}> <input placeholder="Year" onChange={(e) => setYear(e.target.value)} required value={year} type="number" /> <CreditCardSVG className={styles.profileIcons} /> </div>Aquí hay dos enfoques, uno que usa expresiones regulares y el otro que usa una función que toma un año y un intervalo de años aceptables:
const years = [1900, 2000, 25000, 2022, 2025, 2030], regex = /20[2-9]\d/; current_year_or_greater_with_interval = (interval) => (year) => (year >= new Date().getFullYear()) && (year <= new Date().getFullYear() + interval); interval = 3; for (year of years) { console.log(year, current_year_or_greater_with_interval(interval)(year)); console.log(year, regex.test(year)); }O un poco más limpio y más fácil de leer:
const now = new Date().getFullYear(), years = [1900, 2000, 25000, 2022, 2025, 2030]; for (year of years) { console.log(`---${year}---`); console.log('expr (+ 100)', year >= now && year < now + 100); console.log('regex', /20[2-9]\d/.test(year)); }