2013-04-04 31 views
0

我有一个包含用户的姓名分割名称为姓氏,名字,中间初始

输入文本框的用户输入可以是这样的:

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, '#'); 但是这并没有考虑到最后的中间名首字母。

+11

算了。有一个领域的第一个,中间如果有的话和最后 – mplungjan 2013-04-04 16:43:54

+3

他说什么^^^^^^^^^^^! – adeneo 2013-04-04 16:44:12

+6

你应该控制用户如何输入他们的信息,而不是相反:)。只要给你他们想要的方式输入选项。他们只需要遵守。他们会;) – 2013-04-04 16:45:05

回答

2

下,似乎满足您的要求在NPM

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

我确定这可以通过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'),它返回一个对象first,mi,last。我创建了一个jsbin,您可以尝试测试您在问题中显示的名称格式。

4

结帐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' }