0

我正在尝试从用户那里获得一些输入以自动成为 Title Cased。代码对我来说看起来很可靠,但它似乎没有给我我真正想要的输出。它没有将第一个字母连接为大写。这是使输入标题大小写的代码。

export function titleCase(str: string): string {
    return !str
        ? ""
        : str.toLowerCase()
            .split(" ")
            .map(function(word: string): string {
                return word && word.length > 0 ? word.replace(word[0], word[0].toUpperCase()) : ""
            })
            .join(" ")
}

然后我像这样在视图标签中调用它......

<Text style={styles.providerNameTxt}>
    {Scenes.Detail.titleCase(providerName)}
</Text>
<Text style={styles.providerSpecialtyTxt}>
    {Scenes.Detail.titleCase(providerSpecialty)}
</Text>

这不应该工作吗?当用户输入 (providerName) 时,输入不会自动将首字母大写。我不确定为什么。该文件名为 detail.ts,位于 util/scenes 文件夹下。所以使用“Scenes.detail”应该调用该函数。除非我的功能是错误的。此外,在scenes/detail.ts 中有一个titleCase 的导出默认值。它之前不存在,所以我添加了它,但它仍然没有按我的意愿工作。

4

2 回答 2

2

尝试 使用以空格分隔的单词的str.replace(/\b(\w)/g, k => k.toUpperCase()) 任何字符串。str

于 2018-08-03T20:41:32.463 回答
1
export const toTitleCase = (str) => {
 return str.replace(
     /\w\S*/g,
     (txt) => {
         return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
     }
 );
}
于 2018-08-03T22:12:21.503 回答