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

162
Views
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 answers
Answer question

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