Creo una función usando el evento en la tecla arriba para poner "/" dentro del valor del usuario de entrada usando expresiones regulares pero aún hay errores, ¿alguien puede ayudarme?
$('#validUntil').on('keyup', function(e){ $(this).val(function(index, value) { return value // Add "/" separators: .replace(/\B(?=(\d{2})+(?!\d))/g, "/") }); });por ejemplo, si escribo 5121, el resultado debe ser 51/21. el problema es que los resultados no coinciden, los resultados mostrados son: 5/1/21
Bienvenido a Stack Overflow. Considera lo siguiente.
$(function() { $('#validUntil').on('keyup', function(e) { var val = $(this).val(); if (val.length > 3) { $(this).val(val.replace(/\B(?=(\d{2})+(?!\d))/g, "/")); } return true; }); }); <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <input type="text" id="validUntil" /> Sospecho que el problema principal es que el valor se evalúa en cada evento keyup .
Agregar una condición para garantizar una longitud adecuada ayudará a garantizar que la expresión regular funcione cuando sea necesario.
Ahora, si el usuario ingresa 512111 , obtendrá problemas similares. Entonces, tal vez si se detecta / , se elimina y luego se aplica el reemplazo de expresiones regulares.
Está agregando una barra antes de los dos últimos números en la entrada, cada vez que se actualiza su valor.
Así que cuando estás escribiendo:
5 => 5
5 + 1 => 51 => 51
51 + 2 => 512 => 5/12
5/12 + 1 => 5/121 => 5/1/21
Al insertar la barra diagonal, asegúrese de eliminar la barra diagonal insertada anteriormente:
return value.replaceAll('/', '') .replace(/\B(?=(\d{2})+(?!\d))/g, "/")