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

167
Visualizações
RegExp Range fuera de orden en la clase de caracteres para caracteres Unicode

Tengo esta expresión regular:

 RegExp(r'[\u{1f300}-\u{1f5ff}\u{1f900}-\u{1f9ff}\u{1f600}-\u{1f64f}\u{1f680}-\u{1f6ff}\u{2600}-\u{26ff}\u{2700}-\u{27bf}\u{1f1e6}-\u{1f1ff}\u{1f191}-\u{1f251}\u{1f004}\u{1f0cf}\u{1f170}-\u{1f171}\u{1f17e}-\u{1f17f}\u{1f18e}\u{3030}\u{2b50}\u{2b55}\u{2934}-\u{2935}\u{2b05}-\u{2b07}\u{2b1b}-\u{2b1c}\u{3297}\u{3299}\u{303d}\u{00a9}\u{00ae}\u{2122}\u{23f3}\u{24c2}\u{23e9}-\u{23ef}\u{25b6}\u{23f8}-\u{23fa}\u{200d}]');

Cuando estoy usando este RegExp en https://regex101.com , está funcionando. Pero cuando estoy usando este RegExp en Dart, obtengo un Range out of order in character class (tenga en cuenta que lo mismo sucede cuando lo intento usando el equivalente de RegExp en JavaScript).

Estoy realmente seguro de que se trata de un error de escape de cadena, pero no puedo encontrar el problema.

Ya probé una cadena sin procesar en Dart ( r'...' ), escapando de \ en \u{1f300} → \\u{1f300} , sin embargo, ninguno funciona.

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Coincidencia Unicode

Como se señaló en los comentarios, la coincidencia de caracteres Unicode requiere el indicador Unicode en expresiones regulares.

Si intenta simplemente hacer coincidir un carácter Unicode usando RegExp('\u123') , esto fallará por dos razones.

  1. No puede tener caracteres Unicode en la expresión regular. En su lugar, debe escapar de ellos (por ejemplo, mediante el uso de una cadena sin formato): RegExp(r'\u123') .
  2. Esto seguirá sin funcionar porque ahora la expresión regular intenta evaluar cada carácter de la cadena (entonces \ , u , etc.). Aquí es donde entra en juego labandera unicode : RegExp('\u123', unicode: true) .

Tenga en cuenta que para los caracteres Unicode de 3 bytes, deberá agregar llaves, por ejemplo, RegExp(r'u\{1f300}' . Consulte esta pregunta para obtener más información.


Esto significa que su expresión regular final debería verse así:

 RegExp( r'[\u{1f300}-\u{1f5ff}\u{1f900}-\u{1f9ff}\u{1f600}-\u{1f64f}' r'\u{1f680}-\u{1f6ff}\u{2600}-\u{26ff}\u{2700}' r'-\u{27bf}\u{1f1e6}-\u{1f1ff}\u{1f191}-\u{1f251}' r'\u{1f004}\u{1f0cf}\u{1f170}-\u{1f171}\u{1f17e}' r'-\u{1f17f}\u{1f18e}\u{3030}\u{2b50}\u{2b55}' r'\u{2934}-\u{2935}\u{2b05}-\u{2b07}\u{2b1b}' r'-\u{2b1c}\u{3297}\u{3299}\u{303d}\u{00a9}' r'\u{00ae}\u{2122}\u{23f3}\u{24c2}\u{23e9}' r'-\u{23ef}\u{25b6}\u{23f8}-\u{23fa}\u{200d}]+', unicode: true, );

Clústeres de grafemas

Otro problema que puede encontrar es que no podrá hacer coincidir los emojis que abarcan varios caracteres con la expresión regular inicial. Tenga en cuenta que en el fragmento anterior, agregué un + al final para hacer coincidir los emojis que abarcan varios caracteres.

Para ahora hacer coincidir emojis individuales, querrá ejecutar la expresión regular en cada carácter de la cadena, definida por grupos de grafemas . Esto se puede lograr usando package:characters .

Puede encontrar un ejemplo de implementación aquí .

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