Estoy tratando de validar el patrón del número de teléfono usando la función replace() . Necesito eliminar el primer dígito del número si no comienza con 3 y la longitud del número no debe ser mayor que el total de 10 dígitos y eliminar los dígitos de entrada adicionales después de que la longitud sea 10 mientras el usuario está escribiendo. Aquí está mi código:
function phoneNumber(element){ if(element.value.length != 0){ element.value = element.value.replace(/^0[^0-9].{9}/, ''); } } <input type="text" name="phone" required oninput="phoneNumber(this)"/>Lo que quiero es que si el usuario escribe el primer dígito que no sea 3, ese dígito se eliminará y la longitud total del número será 10. Algunos casos para entender:
3430215478 // acceptable 343454545454 // not acceptable and replace() should remove the last two digits 54 0347878788 // not acceptable and replace() should remove the first digit 0 +924544444 // not acceptable and replace() should remove the all the digits because it does not start with 3He probado diferentes expresiones regulares encontradas en Internet pero no funcionan en la función replace(). te agradeceria mucho si me ayudas.
Esto debería hacerlo: element.value.replace(/^[^3]+|^([0-9]{10}).*|[^0-9]+/g, '$1')
function phoneNumber(element) { if (!element.value.length) return; element.value = element.value.replace(/^[^3]+|^([0-9]{10}).*|[^0-9]+/g, '$1') } /* 3430215478 // acceptable 343454545454 // not acceptable and replace() should remove the last two digits 54 0347878788 // not acceptable and replace() should remove the first digit 0 +924544444 // not acceptable and replace() should remove the all the digits because it does not start with 3 */ <input type="text" name="phone" required oninput="phoneNumber(this)"/> La expresión regular contiene 3 partes separadas por | :
^[^3]+ : coincide con cualquier carácter al comienzo de la cadena que no sea el número 3
^([0-9]{10}).* - esta parte hace 2 cosas: primero captura 10 dígitos desde el principio de la cadena ^([0-9]{10}) y hace coincidir todo lo que sigue después .*
[^0-9]+ : finalmente, esta parte coincide con cualquier carácter que no sea un dígito
Cualquier carácter que coincida con la expresión regular será reemplazado por 10 dígitos capturados de la segunda parte de la expresión regular a través de la palabra clave $1 (que representa el primer grupo capturado)
g al final de la expresión regular es una bandera Global , lo que significa que continuará haciendo coincidir cada parte de la expresión regular, sin ella, la expresión regular se detendría en la primera coincidencia.
Es posible que desee considerar el uso de libphonenumber-js