respect-validation/docs/rules/Emoji.md
Henrique Moody 951c16e8e6
Refactor the NotEmoji rule
Since we have the ability to use `not` as a prefix, having rules that
validate negative behaviour makes them a bit inflexible, verbose, and
harder to understand.

This commit will refactor the `NotEmoji` and rename it to `Emoji`. It
will no longer check if the string contains emojis, but rather if the
string is an emoji or not. I’m also adding support to more emojis, since
the rule was a bit outdated.

This change will make the validator more strict, but will make it useful
in other scenarios. However, later on, I would like to create a rule
called `has` which, could use a validator like `Emoji` to check if the
input _has_ emojis.

Assisted-by: Cursor (claude-4.5-opus-high)
2025-12-29 11:16:25 +01:00

2 KiB
Raw Blame History

Emoji

  • v::emoji()

Validates if the input is an emoji or a sequence of emojis.

v::emoji()->isValid('🍕'); // true
v::emoji()->isValid('🎈'); // true
v::emoji()->isValid('⚡'); // true
v::emoji()->isValid('🌊🌊🌊🌊🌊🏄🌊🌊🌊🏖🌴'); // true
v::emoji()->isValid('🇧🇷'); // true (country flag)
v::emoji()->isValid('👨‍👩‍👧‍👦'); // true (ZWJ sequence)
v::emoji()->isValid('👩🏽'); // true (skin tone modifier)
v::emoji()->isValid('1⃣'); // true (keycap sequence)
v::emoji()->isValid('Hello World'); // false
v::emoji()->isValid('this is a spark ⚡'); // false (mixed content)

This validator supports:

  • Basic emojis and pictographs
  • Skin tone modifiers (Fitzpatrick scale)
  • Country flags (regional indicator sequences)
  • Subdivision flags (tag sequences like 🏴󠁧󠁢󠁥󠁮󠁧󠁿)
  • Keycap sequences (0-9, #️⃣, *️⃣)
  • ZWJ (Zero Width Joiner) sequences for families, professions, and combined emojis
  • Emojis up to Unicode 17.0 / Emoji 16.0

Templates

Emoji::TEMPLATE_STANDARD

Mode Template
default {{subject}} must be an emoji
inverted {{subject}} must not be an emoji

Template placeholders

Placeholder Description
subject The validated input or the custom validator name (if specified).

Categorization

  • Strings

Changelog

Version Description
3.0.0 Renamed to Emoji, changed the behavior, and added support for more emojis
2.0.0 Created as NotEmoji

See also: