File tree 5 files changed +23
-22
lines changed
5 files changed +23
-22
lines changed Original file line number Diff line number Diff line change @@ -133,9 +133,11 @@ test("emoji validations", () => {
133
133
const emoji = z . string ( ) . emoji ( ) ;
134
134
135
135
emoji . parse ( "🍺👩🚀🫡" ) ;
136
- emoji . parse ( "💚 💙 💜 💛 ❤️" ) ;
136
+ emoji . parse ( "💚💙💜💛 ❤️" ) ;
137
137
expect ( ( ) => emoji . parse ( ":-)" ) ) . toThrow ( ) ;
138
138
expect ( ( ) => emoji . parse ( "😀 is an emoji" ) ) . toThrow ( ) ;
139
+ expect ( ( ) => emoji . parse ( "😀stuff" ) ) . toThrow ( ) ;
140
+ expect ( ( ) => emoji . parse ( "stuff😀" ) ) . toThrow ( ) ;
139
141
} ) ;
140
142
141
143
test ( "uuid" , ( ) => {
Original file line number Diff line number Diff line change @@ -530,14 +530,7 @@ const emailRegex =
530
530
// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression
531
531
532
532
const emojiRegex =
533
- / ^ (?: [ \u2700 - \u27bf ] | (?: \ud83c [ \udde6 - \uddff ] ) { 2 } | [ \ud800 - \udbff ] [ \udc00 - \udfff ] ) [ \ufe0e \ufe0f ] ? (?: [ \u0300 - \u036f \ufe20 - \ufe23 \u20d0 - \u20f0 ] | \ud83c [ \udffb - \udfff ] ) ? (?: \u200d (?: [ ^ \ud800 - \udfff ] | (?: \ud83c [ \udde6 - \uddff ] ) { 2 } | [ \ud800 - \udbff ] [ \udc00 - \udfff ] ) [ \ufe0e \ufe0f ] ? (?: [ \u0300 - \u036f \ufe20 - \ufe23 \u20d0 - \u20f0 ] | \ud83c [ \udffb - \udfff ] ) ? ) * $ / ;
534
-
535
- // interface IsDateStringOptions extends StringDateOptions {
536
- /**
537
- * Match any configuration
538
- */
539
- // any?: boolean;
540
- // }
533
+ / ( \u00a9 | \u00ae | [ \u2000 - \u3300 ] | \ud83c [ \ud000 - \udfff ] | \ud83d [ \ud000 - \udfff ] | \ud83e [ \ud000 - \udfff ] | \uFE0E | \uFE0F ) / ;
541
534
542
535
// Adapted from https://stackoverflow.com/a/3143231
543
536
const datetimeRegex = ( args : { precision : number | null ; offset : boolean } ) => {
@@ -660,7 +653,7 @@ export class ZodString extends ZodType<string, ZodStringDef> {
660
653
status . dirty ( ) ;
661
654
}
662
655
} else if ( check . kind === "emoji" ) {
663
- if ( ! emojiRegex . test ( input . data ) ) {
656
+ if ( ! [ ... input . data ] . every ( ( char ) => emojiRegex . test ( char ) ) ) {
664
657
ctx = this . _getOrReturnCtx ( input , ctx ) ;
665
658
addIssueToContext ( ctx , {
666
659
validation : "emoji" ,
Original file line number Diff line number Diff line change 1
1
import { z } from "./src" ;
2
2
3
- const schema = z . string ( ) . emoji ( ) ;
3
+ // const emoji = z.string().emoji();
4
4
5
- schema . parse ( "😀 is an emoji" ) ;
5
+ const emojiRegex =
6
+ / ( \u00a9 | \u00ae | [ \u2000 - \u3300 ] | \ud83c [ \ud000 - \udfff ] | \ud83d [ \ud000 - \udfff ] | \ud83e [ \ud000 - \udfff ] | \uFE0E | \uFE0F ) / ;
7
+
8
+ function isEmoji ( val : string ) {
9
+ return [ ...val ] . every ( ( char ) => emojiRegex . test ( char ) ) ;
10
+ }
11
+ console . log ( isEmoji ( "🍺👩🚀🫡" ) ) ;
12
+ console . log ( isEmoji ( "💚💙💜💛❤️" ) ) ;
13
+ console . log ( isEmoji ( ":-)" ) ) ;
14
+ console . log ( isEmoji ( "asdf" ) ) ;
15
+ console . log ( isEmoji ( "😀stuff" ) ) ;
16
+ console . log ( isEmoji ( "stuff😀" ) ) ;
Original file line number Diff line number Diff line change @@ -132,9 +132,11 @@ test("emoji validations", () => {
132
132
const emoji = z . string ( ) . emoji ( ) ;
133
133
134
134
emoji . parse ( "🍺👩🚀🫡" ) ;
135
- emoji . parse ( "💚 💙 💜 💛 ❤️" ) ;
135
+ emoji . parse ( "💚💙💜💛 ❤️" ) ;
136
136
expect ( ( ) => emoji . parse ( ":-)" ) ) . toThrow ( ) ;
137
137
expect ( ( ) => emoji . parse ( "😀 is an emoji" ) ) . toThrow ( ) ;
138
+ expect ( ( ) => emoji . parse ( "😀stuff" ) ) . toThrow ( ) ;
139
+ expect ( ( ) => emoji . parse ( "stuff😀" ) ) . toThrow ( ) ;
138
140
} ) ;
139
141
140
142
test ( "uuid" , ( ) => {
Original file line number Diff line number Diff line change @@ -530,14 +530,7 @@ const emailRegex =
530
530
// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression
531
531
532
532
const emojiRegex =
533
- / ^ (?: [ \u2700 - \u27bf ] | (?: \ud83c [ \udde6 - \uddff ] ) { 2 } | [ \ud800 - \udbff ] [ \udc00 - \udfff ] ) [ \ufe0e \ufe0f ] ? (?: [ \u0300 - \u036f \ufe20 - \ufe23 \u20d0 - \u20f0 ] | \ud83c [ \udffb - \udfff ] ) ? (?: \u200d (?: [ ^ \ud800 - \udfff ] | (?: \ud83c [ \udde6 - \uddff ] ) { 2 } | [ \ud800 - \udbff ] [ \udc00 - \udfff ] ) [ \ufe0e \ufe0f ] ? (?: [ \u0300 - \u036f \ufe20 - \ufe23 \u20d0 - \u20f0 ] | \ud83c [ \udffb - \udfff ] ) ? ) * $ / ;
534
-
535
- // interface IsDateStringOptions extends StringDateOptions {
536
- /**
537
- * Match any configuration
538
- */
539
- // any?: boolean;
540
- // }
533
+ / ( \u00a9 | \u00ae | [ \u2000 - \u3300 ] | \ud83c [ \ud000 - \udfff ] | \ud83d [ \ud000 - \udfff ] | \ud83e [ \ud000 - \udfff ] | \uFE0E | \uFE0F ) / ;
541
534
542
535
// Adapted from https://stackoverflow.com/a/3143231
543
536
const datetimeRegex = ( args : { precision : number | null ; offset : boolean } ) => {
@@ -660,7 +653,7 @@ export class ZodString extends ZodType<string, ZodStringDef> {
660
653
status . dirty ( ) ;
661
654
}
662
655
} else if ( check . kind === "emoji" ) {
663
- if ( ! emojiRegex . test ( input . data ) ) {
656
+ if ( ! [ ... input . data ] . every ( ( char ) => emojiRegex . test ( char ) ) ) {
664
657
ctx = this . _getOrReturnCtx ( input , ctx ) ;
665
658
addIssueToContext ( ctx , {
666
659
validation : "emoji" ,
You can’t perform that action at this time.
0 commit comments