【问题标题】:Given a full name variable how to return back first name + last inital w JS only给定一个全名变量如何仅返回名字+最后一个初始 w JS
【发布时间】:2025-12-28 11:40:12
【问题描述】:

给定一个 JS 变量,例如:

var n = James Bond;
var n = James Earl Bond;
var n = James;

如何返回名字加姓氏首字母?同时考虑忽略中间名和他们只是名字的可能性?以前有人优雅地解决过这个问题吗?

谢谢

【问题讨论】:

  • 名称非常复杂。您想出的任何解决方案都不会适用于 100% 的名称。

标签: javascript regex


【解决方案1】:
function formatName(name)
{
    var newName;

    name = name.split(' ');
    newName = name.shift();

    if ( name.length ) newName += ' ' + name.pop()[0] + '.';

    return newName;
}

这是小提琴:http://jsfiddle.net/68JVS/

【讨论】:

  • +1 虽然只考虑一个名字有点有趣......但 OP 没有指定如何处理这种情况,所以这不是你的错。
  • @PaulP.R.O.仅用于名字,仅显示名字并且不要中断:)
  • 如果只有名字,这个解决方案会提供一个奇怪的输出。将采用“詹姆斯”格式。而不是“詹姆斯”
  • @all - 更新后更好地处理名字。
  • aww,如果您保留原始代码并将一行更改为 name = name[0] + ' ' + ((name.length>1) ? name.pop()[0] + '.' : ''); 就可以了
【解决方案2】:
var names=n.split(' ');

var newname=names[0];

if (names.length>1) {
    names.reverse();
    var newname+=' '+names[0].substr(0,1)+'.';
}

如果只有一个名字“James B.”,则返回“James”。如果是先生的名字。忽略中间名,同时考虑未提供姓氏。

【讨论】:

    【解决方案3】:
    var name_comps = name.split(' ');
    var first_name = name_comps[0];
    var last_init = '';
    if(name_comps.length >0){
        var last_init =  name_comps[name_comps.length -1].charAt(0);
    }
    
    var userName = first_name +  (last_init ? ' ' + last_init : '');
    

    【讨论】:

      【解决方案4】:

      你可以使用一些这样的正则表达式:

      var formattedName = name.replace(/([^ ]+).*([A-Z])[^ ]*$/,"$1 $2.");
      

      但是根据个人经验,将姓名/姓氏作为一个完整的字符串处理会引起很多问题,因为没有命名规则,尤其是当您有全球用户案例场景时。

      【讨论】:

        最近更新 更多