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

549
Views
mecanografiado Yup validación o condición con expresiones regulares usando problema de coincidencias

Estoy tratando de asegurarme de que solo se use un tipo de carácter especial (punto y coma, coma o espacio) en una cadena.

Caso válido:

  • Puede contener letras alfanuméricas y números.
  • Puede contener caracteres especiales: /.
  • Puede contener solo un tipo de caracteres especiales de: espacio, punto y coma o coma en la cadena

por ejemplo, esto debería coincidir ya que solo usa un tipo de carácter especial (punto y coma): https://hello.com/example1;https://hello.com.com/example2;https://hello.com.com /ejemplo3

Esto debería fallar ya que mezcla dos tipos de caracteres especiales (espacio y punto y coma)

https://hola.com/ejemplo1; https://hola.com.com/ejemplo2 ; https://hola.com.com/ejemplo3

Este es mi código:

 const myValidation = yup .string() .matches(/^([A-Za-z0-9://,\\.]|[A-Za-z0-9:// \\.]|[A-Za-z0-9://;\\.])+$/, 'Please separate each with a comma, space or semicolon') .required();

Cuando solo tengo /^([A-Za-z0-9://,\\.]+$/ funciona correctamente para hacer coincidir solo la cadena si solo tiene una coma como carácter especial: https://hello.com/example1,https://hello.com.com/example2,https://hello.com.com/example3

pero tan pronto como agrego las otras condiciones /^([A-Za-z0-9://,\\.]|[A-Za-z0-9:// \\.]|[A-Za-z0-9://;\\.])+$/ comienza a permitir caracteres especiales de punto y coma, espacio y coma en la cadena al mismo tiempo (el caso no válido)

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

0

Para los casos válidos, puede usar un grupo de captura con una referencia inversa \1 para asegurarse de que el "carácter especial" sea el mismo delimitador entre las coincidencias.

 ^[A-Za-z0-9:/.]+(?:([ ,;])[A-Za-z0-9:/.]+(?:\1[A-Za-z0-9:/.]+)*)?$

El patrón coincide:

  • ^ Comienzo de cadena
  • [A-Za-z0-9:/.]+ Match 1+ de los caracteres permitidos
  • (?: Grupo de no captura para hacer coincidir como una parte completa
    • ([ ,;]) Grupo de captura 1 , haga coincidir uno de los delimitadores
    • [A-Za-z0-9:/.]+ Match 1+ de los caracteres permitidos
    • (?:\1[A-Za-z0-9:/.]+)* Opcionalmente, repetir una referencia inversa al mismo delimitador y nuevamente 1+ de los caracteres permitidos
  • )? Cierre el grupo de no captura y hágalo opcional
  • $ Fin de la cadena

Vea una demostración de expresiones regulares .

 const regex = /^[A-Za-z0-9:/.]+(?:([ ,;])[A-Za-z0-9:/.]+(?:\1[A-Za-z0-9:/.]+)*)?$/; [ "https://hello.com/example1;https://hello.com.com/example2;https://hello.com.com/example3", "https://hello.com/example1; https://hello.com.com/example2 ;https://hello.com.com/example3", "https://hello.com/example1" ].forEach(s => console.log(`${regex.test(s)} --> ${s}`) );


Si debe haber al menos un solo delimitador presente, puede acortar el patrón a:

 ^[A-Za-z0-9:/.]+([ ,;])[A-Za-z0-9:/.]+(?:\1[A-Za-z0-9:/.]+)*$

Si las cadenas deben comenzar con http:// o https:// , podría usar:

 ^https?:\/\/[A-Za-z0-9:/.]+(?:([ ,;])https?:\/\/[A-Za-z0-9:/.]+(?:\1[A-Za-z0-9:/.]+)*)?$

Vea otra demostración de expresiones regulares .

about 4 years ago · Juan Pablo Isaza Report

0

es solo uno

 function isOnlyOne() { let s = "zy,,aemnofgbcjkhilpqasdfrstuvrhfwx"; console.log([...new Set(s.split("").filter(e => e.match(/[;, ]/)))].length==1); //return [...new Set(s.split("").filter(e => e.match(/[az]/)))].length==26; }
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!