From b194f32fee1a47e68450914ed5323011634eeb9a Mon Sep 17 00:00:00 2001 From: Juan Jose de la Torre Date: Tue, 24 Mar 2026 19:43:39 -0500 Subject: [PATCH] Fix toTitleCase to support Unicode and non-English alphabets Fixes #37 --- src/String/Extra.elm | 4 ++-- tests/Tests.elm | 13 +++++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/String/Extra.elm b/src/String/Extra.elm index 6f5a9ec..c83768e 100644 --- a/src/String/Extra.elm +++ b/src/String/Extra.elm @@ -121,11 +121,11 @@ toTitleCase : String -> String toTitleCase ws = let uppercaseMatch = - Regex.replace (regexFromString "\\w+") (.match >> toSentenceCase) + Regex.replace (regexFromString "\\S+") (.match >> toSentenceCase) in ws |> Regex.replace - (regexFromString "^([a-z])|\\s+([a-z])") + (regexFromString "^(.)|\\s+(.)") (.match >> uppercaseMatch) diff --git a/tests/Tests.elm b/tests/Tests.elm index 98fd6c1..12c0f47 100644 --- a/tests/Tests.elm +++ b/tests/Tests.elm @@ -114,6 +114,19 @@ toTitleCaseTest = |> String.length in Expect.equal expected result + , test "Works with accented characters" <| + \_ -> + Expect.equal "Álbum De Fotos" (toTitleCase "álbum de fotos") + , test "works with ñ" <| + \() -> + Expect.equal "El Niño" (toTitleCase "el Niño") + , test "works with French accents" <| + \() -> + Expect.equal "École De Paris" (toTitleCase "école de paris") + , test "works with fully accented phrase" <| + \() -> + Expect.equal "Ángel Éxtasis Ícono Ópera Único" + (toTitleCase "ángel éxtasis ícono ópera único") ]