Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

132
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda