Estoy tratando de usar dos métodos RegEx.test() con Y lógico en un bloque condicional, sin embargo, no obtengo el resultado esperado.
const mobileRegEx = /[0][4-5][0-9]{8}/g; const firstPhone = '0432779680'; const secondPhone = '0543000987'; if(mobileRegEx.test(firstPhone) && mobileRegEx.test(secondPhone)){ console.log(firstPhone, secondPhone); /* expecting this to be executed but it is not */ }Una expresión regular con el indicador g (global) realiza un seguimiento de la posición de la última coincidencia y sigue buscando desde la siguiente posición.
Entonces, esto significa que el primer partido devolverá la posición en el primer número, y luego el segundo partido fallará porque en lugar de reiniciar desde el principio, comenzará desde la posición del primer partido y fallará.
La solución es simplemente eliminar la g de su expresión original como esta
/[0][4-5][0-9]{8}/;Sin embargo, también veo que su expresión puede dar falsos positivos. Por ejemplo, si agrega caracteres aleatorios antes y después del número real, aún coincidirá.
P.ej
firstPhone = 'WRONG0432779680WRONG'; Seguirá siendo verdadero. Si está utilizando esto para validar un formato de número de teléfono, debe restringir la expresión regular a toda la cadena pasada. Puede hacerlo usando ^ al principio y $ al final, para decir que esta es la cadena completa.
Entonces la expresión regular debería verse como
const mobileRegEx = /^[0][4-5][0-9]{8}$/;Aquí está el código final
const mobileRegEx = /^[0][4-5][0-9]{8}$/; const firstPhone = '0432779680'; const secondPhone = '0543000987'; if(mobileRegEx.test(firstPhone) && mobileRegEx.test(secondPhone)){ console.log(firstPhone, secondPhone); }