如何实现按指定规则格式化并返回用户输入的姓名
姓名格式化功能实现方案
核心逻辑梳理
- 输入预处理:去除输入字符串首尾空白,将连续多个空格替换为单个空格后,按空格切割为姓名片段列表
- 辅助工具函数:封装统一的首字母大写格式化方法,将单个姓名片段处理为「首字母大写+其余字符小写」的格式,例:输入
jOhn返回John - 分支处理:
- 若姓名片段共2段:将两个片段分别格式化后用空格拼接即可
- 若姓名片段共3段:前两个片段分别格式化后用连字符
-拼接,再和格式化后的第三个片段用空格拼接
- 输出最终拼接结果
代码示例
Python 实现
def format_name(raw_name: str) -> str: # 辅助函数:单段姓名格式化 def capitalize_segment(seg: str) -> str: if not seg: return "" return seg[0].upper() + seg[1:].lower() # 预处理输入,分割为姓名片段 segments = [s for s in raw_name.strip().split() if s] if len(segments) == 2: return f"{capitalize_segment(segments[0])} {capitalize_segment(segments[1])}" elif len(segments) == 3: part1 = f"{capitalize_segment(segments[0])}-{capitalize_segment(segments[1])}" part2 = capitalize_segment(segments[2]) return f"{part1} {part2}" # 可根据需求扩展其他长度的处理逻辑,这里默认返回原格式化后的全空格拼接结果 else: return " ".join([capitalize_segment(s) for s in segments]) # 测试用例 print(format_name("jOhn JhOnson")) # 输出:John Jhonson print(format_name("jonny jon jony")) # 输出:Jonny-Jon Jony
JavaScript 实现
function formatName(rawName) { // 辅助函数:单段姓名格式化 const capitalizeSegment = (seg) => { if (!seg) return '' return seg[0].toUpperCase() + seg.slice(1).toLowerCase() } // 预处理输入,分割为姓名片段 const segments = rawName.trim().split(/\s+/).filter(s => s) if (segments.length === 2) { return `${capitalizeSegment(segments[0])} ${capitalizeSegment(segments[1])}` } else if (segments.length === 3) { const part1 = `${capitalizeSegment(segments[0])}-${capitalizeSegment(segments[1])}` const part2 = capitalizeSegment(segments[2]) return `${part1} ${part2}` } // 其他长度默认处理 return segments.map(capitalizeSegment).join(' ') } // 测试用例 console.log(formatName("jOhn JhOnson")) // 输出:John Jhonson console.log(formatName("jonny jon jony")) // 输出:Jonny-Jon Jony
内容的提问来源于stack exchange,提问作者TowelieDS
相关产品推荐
相关产品推荐

