Estoy tratando de limitar un campo de entrada a solo números y la posibilidad de un signo "+" solo en el índice [0] de la cadena. La idea es dejar que el usuario escriba su número de teléfono, se me ocurrió esto:
function main() { let phone = document.getElementById('phone'); let phoneRegex = /[a-zA-Z]|[-!$%^&*()_|~=`{}[\]:";'<>?,./]/; phone.value = phone.value.replace(phoneRegex, ''); console.log(phone.value); } <input id="phone"> <button onclick="main()">Run</button>La cuestión es que esto funciona bien, pero quiero limitar el primer carácter a solo un dígito o un signo "+", los caracteres que provienen del índice [1] en adelante solo deben ser números.
no se me ocurre una idea de como solucionar esto
Pruebe esto como punto de partida (probablemente desee expandirlo aún más para tener en cuenta la longitud total de la cadena, delimitadores como - , etc.):
let phoneRegex = /\+?\d+/; + en una expresión regular tiene un significado especial, por lo que cuando queremos hacer coincidir el carácter literal "+", debemos escaparlo. Y siguiéndolo con el ? carácter lo hace opcional:
\+? A continuación, \d seguido de + coincidirá con cualquier secuencia de uno o más dígitos:
\d+Puede ver una visualización de este patrón aquí .
Sé que llego tarde en este juego, pero agrego una solución más para mí y las referencias futuras de otros.
Se me ocurrió esta solución que funciona para mí:
/^(\+|[0-9])?[0-9]{12}$/Gracias
Quiero limitar el primer carácter a solo un dígito o un signo "+", los caracteres que provienen del índice [1] en adelante deben ser solo números.
La expresión regular:
/^\+?\d+$/medio:
Desde el principio, uno o cero + signos, luego uno o más números hasta el final.
Tenga en cuenta los siguientes símbolos de expresión regular:
* - cero o más+ - uno o más? - cero o uno