2013-04-04 125 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' } 
相關問題