mirror of
https://github.com/Respect/Validation.git
synced 2026-03-17 23:59:51 +01:00
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)
2 KiB
2 KiB
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: