en reaccionar estoy usando regex para la validación del mes, inicialmente estoy permitiendo solo dos números usando regex que funciona bien durante un mes y un año y puedo validar los meses del 01 al 12, pero me quedé atascado en cómo validar la fecha de vencimiento, por ejemplo, ahora es el 22/06. Necesito permitir solo números del 22/07. Cómo lograrlo. a continuación está mi código:
for allowing only 2 nos: setInput({ ...input, [e.target.name]: e.target.value.replace(/\D/g, "").slice(0, 2) });para permitir de 1 a 12 números debajo del código se usa onblur:
let cardMonth = /^0[1-9]|1[0-2]/.test(e.target.value); if (cardMonth === true) { setInput({ ...input, [e.target.name]: e.target.value.replace(/\D/g, "").slice(0, 2) }); setErrors({ ...errors, cardmonth: false }); } else { setErrors({ ...errors, cardmonth: true }); }tener dos campos de entrada para el mes y el año.
Pruebe este patrón, lo usé en mi aplicación y fue muy útil:
function datePatten(e) { var code = e.keyCode; var allowedKeys = [8]; if (allowedKeys.indexOf(code) !== -1) { return; } e.target.value = e.target.value .replace( /^([1-9]\/|[2-9])$/g, "0$1/" // 3 > 03/ ) .replace( /^(0[1-9]|1[0-2])$/g, "$1/" // 11 > 11/ ) .replace( /^([0-1])([3-9])$/g, "0$1/$2" // 13 > 01/3 ) .replace( /^(0?[1-9]|1[0-2])([0-9]{2})$/g, "$1/$2" // 141 > 01/41 ) .replace( /^([0]+)\/|[0]+$/g, "0" // 0/ > 0 and 00 > 0 ) .replace( /[^\d\/]|^[\/]*$/g, "" // To allow only digits and `/` ) .replace( /\/\//g, "/" // Prevent entering more than 1 `/` ); }