Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

129
Vistas
Expresión regular para determinar la clave

En mi aplicación Angular, estoy usando un servicio de traducción que admite la definición de transpiladores personalizados. El transpilador recibe las traducciones entrantes según el contenido de los archivos de traducción. Algunas son traducciones puras y también puede pasar objetos a traducciones (por ejemplo, la label.profile.greeting traducción etiqueta.perfil.saludo):

 { "label.startpage.welcome": "Welcome!", "label.startpage.info": "This website is awesome. Hope you like it.", "label.profile.greeting": "Hi, {{username}}." }

Cuando el servicio intenta traducir, recorre todas las palabras dentro de una traducción y envía esa palabra al transpilador. Luego, el transpilador intenta determinar si se trata de una traducción simple o de un objeto que debe inyectarse en la traducción.

Sin embargo, mi transpilador tiene la capacidad de inyectar traducciones en otras traducciones:

 { "label.favourite": "My favourite fruit is", "label.favourite.banana": "{{label.favourite}} banana!", "label.favourite.pineapple": "{{label.favourite}} pineapple!" }

He escrito esta simple función de flecha que usa mi transpilador para determinar si la traducción entrante es una clave de traducción o no:

 const isTranslationKey = (value: string): boolean => /(\w+(?:\.\w+)+)/.test(value);

Y funciona. Aunque, esta expresión regular tiene un alto riesgo de seguridad debido a la sensibilidad a la seguridad de las expresiones regulares, según SonarQube . Supongo que se trata de la longitud de la cadena que puede ser la causa de futuras fallas, ya que no hay un límite máximo para la cadena. Y he intentado cambiar la expresión regular a algo similar, pero no puedo juzgar si encaja mejor o no:

 /^([A-Za-z]{1,10})+(\.([A-Za-z]{1,10})).{1,40}$/

Necesito algo de experiencia en este asunto. ¡Gracias por adelantado! :)

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

La expresión regular final que puede usar puede ser cualquiera de las dos, dependiendo de si necesita admitir todas las letras Unicode o no:

 /^(?=.{3,60}$)[az]+(?:\.[az]+)+$/i /^(?=.{3,60}$)\p{L}+(?:\.\p{L}+)+$/u

Tenga en cuenta que la segunda expresión regular es compatible con ECMAScript 2018 y, antes de usarla, asegúrese de que su entorno de JavaScript la admita.

Detalles :

  • ^ - comienzo de la cadena
  • (?=.{3,60}$) : una búsqueda anticipada positiva que requiere de tres a sesenta caracteres distintos de los caracteres de salto de línea seguidos de la posición del final de la cadena inmediatamente a la derecha de la ubicación actual
  • [az]+ - una o más letras ASCII (cualquier letra Unicode si usa \p{L} o \p{Alphabetic} )
  • (?:\.[az]+)+ - una o más repeticiones de . y una o más letras ASCII (cualquier letra Unicode si usa \p{L} / \p{Alphabetic} )
  • $ - final de la cadena.

Vea la demostración de expresiones regulares .

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda