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

120
Vistas
Regex para hacer coincidir emojis que se pueden combinar válidamente con modificadores de tono de piel?

El código JS para detectar emojis (en el sentido habitual del término "emoji") es simplemente:

 let str = "..."; if(/\p{Extended_Pictographic}/u.test(str)) { // do something }

¿Hay alguna forma igualmente simple de detectar emojis que puedan tener modificadores de tono de piel agregados de manera válida?

Un requisito clave es que no tengo que actualizar la expresión regular a lo largo de los años a medida que se agregan más emojis o los emojis existentes se vuelven compatibles con el tono de la piel. Básicamente, me pregunto si hay algo como un escape de propiedad Skin Unicode, o alguna otra solución elegante y preparada para el futuro .


Notas:

  • Debe funcionar sin acceso DOM (es decir, del lado del servidor, trabajadores, etc.).
  • Tenga en cuenta que el objetivo no es detectar modificadores de tono de piel, sino detectar emojis que puedan tener un modificador de tono de piel agregado de manera válida; por ejemplo, la expresión regular/función debe coincidir con 👶 (no tiene modificador de tono de piel, pero es válido para añádele uno).
  • Quiero enfatizar que una expresión regular grande y antigua de rangos Unicode que no está preparada para el futuro no se ajusta a los requisitos de mi caso de uso particular. Pero tenga en cuenta que un montón de rangos de Unicode cumplen con los requisitos si es una prueba para el futuro.
  • Esta pregunta parece ser similar al considerar el título, pero al leer el cuerpo de la pregunta, está formulando una pregunta diferente.
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Puede usar la escala de Fitzpatrick para detectar un emoji del tono de la piel. Un emoji con un tono de piel contendrá cualquiera de los seis unicodes de la escala de Fitzpatrick.

EDITAR:

Esta solución utiliza Element.getBoundingClientRect() para determinar si un emoji tendrá el mismo ancho y alto después de haber concatenado el emoji del tono de piel de Fitzpatrick.

 function isEmojiSkinToneAdaptable(emoji) { const SKIN_TONES = [ '\u{1f3fb}', // skin tone 1 & 2 '\u{1f3fc}', // skin tone 3 '\u{1f3fd}', // skin tone 4 '\u{1f3fe}', // skin tone 5 '\u{1f3ff}', // skin tone 6 ]; function getRemovedSkinToneEmoji(emoji) { let emojiCopy = ' '.concat(emoji).slice(1); SKIN_TONES.forEach(skinTone => { emojiCopy = emojiCopy.replace(skinTone, ''); }) return emojiCopy; } function getEmojiRects(emoji) { let span = document.createElement('span'); span.style.position = 'fixed'; span.style.top = '-99999px'; span.textContent = emoji; document.body.append(span); let emojiRects = span.getBoundingClientRect(); span.remove(); return emojiRects; } let baseEmoji = getRemovedSkinToneEmoji(emoji); let skinToneEmoji = baseEmoji + SKIN_TONES[1]; let baseEmojiRects = getEmojiRects(baseEmoji); let skinToneEmojiRects = getEmojiRects(skinToneEmoji); return baseEmojiRects.width === skinToneEmojiRects.width && baseEmojiRects.height === skinToneEmojiRects.height; } console.log(`Human with skin tone: ${isEmojiSkinToneAdaptable('👶🏽')}`); // true console.log(`Thumbs up without skin tone: ${isEmojiSkinToneAdaptable('👍')}`); // true console.log(`Animal: ${isEmojiSkinToneAdaptable('🦁')}`); // false

about 4 years ago · Juan Pablo Isaza Denunciar

0

La propiedad de carácter Unicode relevante se llama Emoji_Modifier_Base . /\p{Emoji_Modifier_Base}/u.test() devolverá verdadero para cada carácter emoji que pueda tener un modificador de tono de piel.

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