由于您将其标记为 ruby-on-rails,我假设您有present?
可用的...
def initials_for(full_name)
(first_name, *, last_name) = full_name.split
[first_name, name_initial(last_name)].reject(&:blank?).join(" ")
end
def name_initial(name)
if name.present?
"#{name[0]}."
else
""
end
end
puts initials_for(user.name)
首先,我在此帮助程序中考虑了 user 的使用,这是此函数不需要知道的依赖项。按照 puts 行中的指示传递字符串。
正如其他几个人所指出的那样,我做了一个助手来处理带有句点的第二个首字母。然后将这些部分收集到一个数组中,拒绝空白部分,并用空格将它们连接起来。
请注意在拆分的左侧使用了 splat 和意图揭示变量。如果你尝试一下,你应该会看到 first_name 总是有最左边的名字,而 last_name 总是有最右边的名字,如果只有一个名字,则为 nil。
在处理名字、姓氏、中间名、娘家姓和普通名字的变体时,我经常使用这种拒绝和加入的模式,留下一个没有额外字符等的可读名字。