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

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

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 Relatório

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