Estoy trabajando en un formulario en el que necesito que el campo del número de teléfono se vuelva a formatear, a medida que escribe, en
xxx-xxx xx xx .
Esto en sí mismo es sencillo y se ha preguntado antes, pero mi problema es un poco diferente:
He usado el enfoque solo de JavaScript que se encuentra en este violín , pero para ajustarme a mi formato deseado, he editado el último bloque de código en esto:
const areacode = input.substring(0,3); const gr1 = input.substring(3,6); const gr2 = input.substring(6,8); const gr3 = input.substring(8,10); if(input.length > 7) { target.value = `${areacode}-${gr1} ${gr2} ${gr3}`; } else if(input.length > 5) { target.value = `${areacode}-${gr1} ${gr2}`; } else if(input.length > 2) { target.value = `${areacode}-${gr1}`; } else if(input.length > 0) { target.value = `${areacode}`; }Cuando pruebo esto en el violín, o lo pego en codepen, por ejemplo, funciona perfectamente. Pero cuando lo aplico a mi sitio, no lo hace. Los personajes son reemplazados de una manera extraña.
Sospecha: hay una constante que contiene un reemplazo de expresiones regulares, así:
const input = event.target.value.replace(/\D/g,'').substring(0,10);No soy bueno con RegEx, pero como esto funciona en un lugar pero no en el otro, siento que tengo que sospechar de esta línea de código.
Experimentando con el código que proporcionó en la pregunta, descubrí que funciona correctamente. No publique código que funcione en StackOverflow preguntando qué tiene de malo.
Sin embargo, examiné su sitio web con un depurador y encontré un problema con la expresión regular: en lugar de usar input.replace(/\D/g, "") , escribió input.replace(/D/g, "") , que elimina todos los caracteres D
Como nota al margen, recomiendo encarecidamente establecer puntos de interrupción en la vista de código fuente del navegador para resolver tales problemas.