【问题标题】:Splitting Name into last name, first name, middle initial将姓名拆分为姓氏、名字、中间名首字母
【发布时间】:2013-03-26 20:49:10
【问题描述】:

我有一个来自包含用户名的文本框的用户输入

输入可能如下所示:

var input = "Doe, John M";

但是,输入可能要复杂得多。 喜欢:

var input = "Doe Sr, John M"

"Doe, John M"

"Doe, John, M"

甚至"Doe Sr, John,M"

我想做的是将姓氏(带有 sr 或 jr)和名字分开,然后是中间名的首字母。

所以,这些字符串变成:

var input = "Doe#John#M""Doe Sr#John#M""Doe#John#M"

我试过这个正则表达式,

input = input.replace(/\s*,\s*/g, '#'); 但这并没有考虑到最后一个中间名首字母。

【问题讨论】:

  • 算了。有一个字段用于第一个、中间(如果有)和最后一个
  • 他说了什么^^^^^^^^^^^!
  • 您应该控制用户输入信息的方式,而不是相反:)。只需按照您想要的方式给他们输入选项。他们只需要遵守。他们会;)
  • 请考虑有多个中间名首字母的情况。

标签: javascript regex


【解决方案1】:

我确信这可能可以通过 RegEx 完成,但将字符串拆分为数组通常更快且更简单 (IMO)。试试这个功能:

var parseName = function(s) {
  var last = s.split(',')[0];
  var first = s.split(',')[1].split(' ')[1];
  var mi = s[s.length-1];

  return {
    first: first,
    mi: mi,
    last: last
  };    
};

你称它只是传递名称,例如parseName('Doe, John M') 并返回一个带有firstmilast 的对象。我创建了一个jsbin,您可以尝试测试您在问题中显示的名称格式。

【讨论】:

    【解决方案2】:

    在 npm 上结帐 humanparser

    https://www.npmjs.org/package/humanparser

    将人名字符串解析为称呼、名字、中间名、姓氏、后缀。

    安装

    npm install humanparser
    

    用法

    var human = require('humanparser');
    
    var fullName = 'Mr. William R. Jenkins, III'
        , attrs = human.parseName(fullName);
    
    console.log(attrs);
    
    //produces the following output
    
    { saluation: 'Mr.',
      firstName: 'William',
      suffix: 'III',
      lastName: 'Jenkins',
      middleName: 'R.',
      fullName: 'Mr. William R. Jenkins, III' }
    

    【讨论】:

      【解决方案3】:

      以下似乎符合您的要求

      input = input.replace(/\s*,\s*|\s+(?=\S+$)/g, '#');
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多