Algoritmos de JavaScript y proyectos de estructuras de datos - Validador de números telefónicos

Cuéntanos qué está pasando:
Necesito ayuda en cuanto al validador de numeros telefónicos, este es el código que llevo, quiero saber por qué me retorna todos los false a excepcion de los true que esos dice haber pasado.

Tu código hasta el momento

function telephoneCheck(str) {
  for(let i = str; i !== str.length; i++){
    let numero = /^[(]?[0-9]{0,9}[-\s\.]?[0-9]{3}[-\s\.]?[0-9]{4,6}[)]?$/im
    numero.test()
    return true;
  }
  return false;
}

telephoneCheck("555-555-5555");

Información de tu navegador:

El agente de usuario es: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36

Desafío: Algoritmos de JavaScript y proyectos de estructuras de datos - Validador de números telefónicos

Enlaza al desafío:

¡Hola!

@Sebastián

Realmente tu codigo siempre devolvera el valor true, es por eso que las pruebas que deben devolver true pasan.

Puedes comprobarlo agregando la siguiente linea de codigo y escribiendo lo que quieras:

console.log(telephoneCheck("ESCRIBE AQUI LO QUE QUIERAS"));

Lo anterior ocurre debido a que estas inicando tu bucle con let i = str, entonces no importa lo que escribas, la condicion siempres se cumplira de inicio y siempre devolvera el valor true, Ademas en esta linea return true; le dices a tu codigo que siempre devuelva true ya que no hay ninguna condicion para que haga algo diferente.

Tambien te comento que aunque actualmente esta linea nunca se ejecuta numero.test( ) por lo que te comente en le parrafo anterior, en caso de que se ejecutara no haria nada porque no estas pasando ningun valor al metodo test

Ahora para ayudarte y que puedas seguir adelante, te comento que utilizar un bucle en este caso puede no ser la mejor solucion, no tocare tu expresion regular ya que ese es realmente el trabajo que estas haciendo, pero puedes modificar tu codigo para que quede de la siguiente forma:

function telephoneCheck(str) {
  let numero = /^[(]?[0-9]{0,9}[-\s\.]?[0-9]{3}[-\s\.]?[0-9]{4,6}[)]?$/im
  return numero.test(str) ? true : false;
}

Este linea return numero.test(str) ? true : false; comprueba si el valor introducido cumple con lo dice la expresion regular, en cuyo caso devolvera true de lo contrario devolvera false.

Ya solo tienes que trabajar en la expresion regular.

O si quieres mantener el bucle puedes modificar tu codigo para que quede de la siguiente forma:

function telephoneCheck(str) {
  let resultado;
  for(let i = 0; i < str.length; i++){
    let numero = /^[(]?[0-9]{0,9}[-\s\.]?[0-9]{3}[-\s\.]?[0-9]{4,6}[)]?$/im
    numero.test(str) ? resultado = true : resultado = false;
  }
  return resultado
}

Pero como te comente el bucle es inecesario.

saludos