在Elm中格式化字符串

bir*_*ird 1 elm

我有一个字符串列表,并使用li标签将其动态生成为HTML 。我也想将该值分配给id属性。但问题是字符串项具有一些特殊的字符,如:'é,...我只是想输出只包括数字(0-9)和字母(AZ)。

// Input:
listStr = ["Pop & Suki", "PINK N' PROPER", "L'Oréal Paris"]

// Output: 
result = ["pop_suki", "pink_n_proper", "loreal_paris"] ("loral_paris" is also good)
Run Code Online (Sandbox Code Playgroud)

目前,我只是将其小写并替换" "_,但不知道如何消除特殊字符。

非常感谢!

O.O*_*nce 6

与其考虑消除特殊字符,不如考虑允许的字符-您只需要小写字母数字字符。

Elm提供Char.isAlphaNum来测试字母数字字符,并提供Char.toLower来将字符转换为小写。它还提供了更高的功能String.foldl,你可以用它来处理String一个Char在同一时间。

因此,对于每个字符:

  • 检查它是否为字母数字
  • 如果是,请将其转换为小写
  • 如果不是,并且它是一个空格,请将其转换为下划线
  • 否则丢掉角色

放在一起,我们创建了一个处理字符的函数,并将其附加到到目前为止已处理的字符串中,然后将其应用于输入字符串中的所有字符:

transformNextCharacter : Char -> String -> String
transformNextCharacter nextCharacter partialString =
    if Char.isAlphaNum nextCharacter then
        partialString ++ String.fromChar (Char.toLower nextCharacter)
    else if nextCharacter == ' ' then
        partialString ++ "_"
    else
        partialString

transformString : String -> String
transformString inputString =
    String.foldl transformNextCharacter "" inputString
Run Code Online (Sandbox Code Playgroud)

在线演示在这里

注意:此答案仅会丢弃特殊字符,并因此产生"loral_paris"OP可接受的字符。