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

168
Vistas
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 Respuestas
Responde la pregunta

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 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