句子大小写转换函数无法识别多语言字符的问题求助
解决sentenceCase函数支持多语言Unicode字符的问题
问题核心在于JavaScript正则的Unicode支持逻辑:你使用的\p{L}\p{M}属于Unicode属性转义语法,但JS正则默认不识别这类规则,必须添加u修饰符开启Unicode模式才能生效。另外原正则的[\p{L}\p{M}]会匹配所有字母(包括大写),应该限定为匹配小写Unicode字母,避免无效匹配。
修改后的函数代码
function sentenceCase(input, lowercaseBefore) { input = (input === undefined || input === null) ? '' : input; if (lowercaseBefore) { input = input.toLowerCase(); } // 添加u修饰符启用Unicode模式,用\p{Ll}匹配小写Unicode字母,\p{M}匹配标记字符 return input.toString().replace(/(^|\. *)([\p{Ll}\p{M}])/gu, function (match, separator, char) { return separator + char.toUpperCase(); }); }
关键修改说明
- 正则末尾添加
u修饰符:开启Unicode模式,让\p{Ll}和\p{M}这类Unicode属性转义语法生效。 - 替换
[\p{L}\p{M}]为[\p{Ll}\p{M}]:\p{Ll}专门匹配小写的Unicode字母,确保只对需要大写的小写字符进行转换,避免匹配已大写的字母。
测试示例
输入:hej, æøå. hej igen
输出:Hej, æøå. Hej igen
输入:hello, one two. three four
输出:Hello, one two. Three four
内容的提问来源于stack exchange,提问作者Dmiich
相关产品推荐
相关产品推荐

