Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

168
Views
Expresión regular con una declaración condicional que valida un número de teléfono en JavaScript

Aunque he usado expresiones regulares con bastante frecuencia, rara vez creo las mías propias. He estado leyendo sobre ellos recientemente porque necesito crear algunas expresiones bastante específicas para un proyecto en el que estoy trabajando.

Tengo un resumen muy específico sobre qué números de teléfono están permitidos en un formulario. Hay restricciones en los dos primeros o en los tres primeros números.

Los números deben comenzar con 06 o 07 , o alternativamente con 081 , 082 , 083 o 084 .

He escrito una expresión regular con una declaración condicional que creo que debería hacer una de dos cosas:

  1. Si el número comienza con 06 o 07 , verifique que los otros 8 caracteres de la cadena sean números.
  2. Si el número comienza con 08 , verifique que el siguiente carácter esté entre 1 y 4 , luego verifique que los otros 7 caracteres sean números.

Usé este tutorial para aprender cómo funcionan los condicionales en expresiones regulares. Aquí está la expresión que creé:

 const validMobile = new RegExp(/^((0)?([6-7])[0-9]{8}|([8])[1-4][0-9]{7}) *$/);

Lo que entiendo aquí es lo siguiente:

  • /^ (Empieza por)
  • (0) (debe tener un cero primero)
  • ?([6*7]) (si el segundo carácter es seis o siete)
  • [0-9]{8} (verifique que los siguientes ocho caracteres sean números entre cero y 9)
  • |(8) (de lo contrario, si el segundo carácter es ocho)
  • [1-4] (verifique que el tercer carácter sea un número entre uno y cuatro)
  • [0-9]{7} (verifique que los siguientes siete caracteres sean números entre cero y nueve)

Tenga en cuenta que la longitud de la cadena se está verificando en otro lugar, aunque creo que esta expresión también debería facilitar la verificación de que el número tiene exactamente 10 caracteres.

Esto no está dando el resultado esperado, así que debo estar malinterpretando algo. ¿Alguien podría ayudarme a entender dónde podría estar fallando?

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

El problema con su expresión regular son las dos alternativas (0)?([6-7])[0-9]{8} y ([8])[1-4][0-9]{7} . Tienes el cero inicial dentro del primero, por lo que un número como 0811234567 , que debe coincidir con el segundo, nunca coincidirá. Si mueve el cero de la primera alternativa al exterior, comienza a funcionar como pretendía:

 ^0(([6-7])[0-9]{8}|(8)[1-4][0-9]{7}) *$

Compruébelo usted mismo en regex101 ...

Más comentarios sobre la expresión regular original:

  • el ? después del cero en realidad lo hace opcional, por eso lo eliminé.
  • tiene algunos grupos de captura sospechosos ( ([6-7]) y ([8]) ), ¿realmente los necesita?
  • más limpieza motivada por @AmigoJack: clase de personaje [8] sin efecto -> 8 .
about 4 years ago · Juan Pablo Isaza Report

0

  • Los corchetes redondos no son para divertirse: si no quiere capturar nada, no los use. Úselos solo para su problema (this|that) , donde la tubería funciona como un operador OR.
  • Los corchetes no necesitan rangos si todo lo que permite son 2 caracteres.
  • Si un carácter es obligatorio, simplemente escríbalo. No lo pongas entre corchetes, y no lo pongas entre corchetes.
  • ? es un cuantificador, lo que significa que lo que vino antes es opcional (puede ocurrir 0 veces o una vez). Si pones eso detrás de tu cero, lo conviertes en lo opuesto a "debe estar ahí".

Con ese conocimiento en mente y escribiendo la expresión regular en varias líneas e ignorando los espacios en blanco entre ellos, se trata de:

 ^0( [67][0-9]{8} | 8[1-4][0-9]{7} )$

También eliminé los espacios en blanco opcionales después de tu número de teléfono: en ninguna parte explicaste que querías tal cosa, ni estaba en tu lista. Tampoco tiene sentido permitir espacios solo después del número de teléfono pero no al frente. Así que la parte * tampoco es para divertirse.

También desaconsejo encarecidamente el uso de expresiones regulares en los números de teléfono: las personas tienden a ingresar números de teléfono sin espacios o guiones en el medio. Echa un vistazo a todas las Q existentes .

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!