diff --git a/packages/components/src/utils/strings.ts b/packages/components/src/utils/strings.ts index bb43a5e53a405..8f002e78e4f2c 100644 --- a/packages/components/src/utils/strings.ts +++ b/packages/components/src/utils/strings.ts @@ -6,64 +6,22 @@ import { paramCase } from 'change-case'; const ALL_UNICODE_DASH_CHARACTERS = new RegExp( `[${ [ - // - (hyphen-minus) - '\u002d', // ~ (tilde) '\u007e', // ­ (soft hyphen) '\u00ad', - // ֊ (armenian hyphen) - '\u058a', - // ־ (hebrew punctuation maqaf) - '\u05be', - // ᐀ (canadian syllabics hyphen) - '\u1400', - // ᠆ (mongolian todo soft hyphen) - '\u1806', - // ‐ (hyphen) - '\u2010', - // non-breaking hyphen) - '\u2011', - // ‒ (figure dash) - '\u2012', - // – (en dash) - '\u2013', - // — (em dash) - '\u2014', - // ― (horizontal bar) - '\u2015', // ⁓ (swung dash) '\u2053', - // superscript minus) + // ⁻ (superscript minus) '\u207b', - // subscript minus) + // ₋ (subscript minus) '\u208b', // − (minus sign) '\u2212', - // ⸗ (double oblique hyphen) - '\u2e17', - // ⸺ (two-em dash) - '\u2e3a', - // ⸻ (three-em dash) - '\u2e3b', - // 〜 (wave dash) - '\u301c', - // 〰 (wavy dash) - '\u3030', - // ゠ (katakana-hiragana double hyphen) - '\u30a0', - // ︱ (presentation form for vertical em dash) - '\ufe31', - // ︲ (presentation form for vertical en dash) - '\ufe32', - // ﹘ (small em dash) - '\ufe58', - // ﹣ (small hyphen-minus) - '\ufe63', - // - (fullwidth hyphen-minus) - '\uff0d', + // any other Unicode dash character + '\\p{Pd}', ].join( '' ) }]`, - 'g' + 'gu' ); export const normalizeTextString = ( value: string ): string => { diff --git a/packages/components/src/utils/test/strings.js b/packages/components/src/utils/test/strings.js index 2c7d9641260f5..68c881250fd10 100644 --- a/packages/components/src/utils/test/strings.js +++ b/packages/components/src/utils/test/strings.js @@ -106,5 +106,67 @@ describe( 'normalizeTextString', () => { expect( normalizeTextString( 'foo⸻bar' ) ).toBe( 'foo-bar' ); expect( normalizeTextString( 'foo゠bar' ) ).toBe( 'foo-bar' ); expect( normalizeTextString( 'foo-bar' ) ).toBe( 'foo-bar' ); + + const dashCharacters = [ + // - (hyphen-minus) + '\u002d', + // ~ (tilde) + '\u007e', + // ­ (soft hyphen) + '\u00ad', + // ֊ (armenian hyphen) + '\u058a', + // ־ (hebrew punctuation maqaf) + '\u05be', + // ᐀ (canadian syllabics hyphen) + '\u1400', + // ᠆ (mongolian todo soft hyphen) + '\u1806', + // ‐ (hyphen) + '\u2010', + // non-breaking hyphen) + '\u2011', + // ‒ (figure dash) + '\u2012', + // – (en dash) + '\u2013', + // — (em dash) + '\u2014', + // ― (horizontal bar) + '\u2015', + // ⁓ (swung dash) + '\u2053', + // superscript minus) + '\u207b', + // subscript minus) + '\u208b', + // − (minus sign) + '\u2212', + // ⸗ (double oblique hyphen) + '\u2e17', + // ⸺ (two-em dash) + '\u2e3a', + // ⸻ (three-em dash) + '\u2e3b', + // 〜 (wave dash) + '\u301c', + // 〰 (wavy dash) + '\u3030', + // ゠ (katakana-hiragana double hyphen) + '\u30a0', + // ︱ (presentation form for vertical em dash) + '\ufe31', + // ︲ (presentation form for vertical en dash) + '\ufe32', + // ﹘ (small em dash) + '\ufe58', + // ﹣ (small hyphen-minus) + '\ufe63', + // - (fullwidth hyphen-minus) + '\uff0d', + ]; + expect( normalizeTextString( dashCharacters.join( '' ) ) ).toBe( + '-'.repeat( dashCharacters.length ) + ); } ); } );