题 使用javascript拆分名字和姓氏


我有一个名字的用户 Paul Steve Panakkal。这是一个很长的名称,它不适合div容器。所以无论如何使用javascript或jquery从中分割出名字和姓氏。

该名称是从PHP获得的JavaScript变量。然后使用JS将其拆分。


28
2017-09-09 16:29


起源


你究竟想用这些部件做什么呢?什么构成名字和姓氏? - Felix Kling
值得注意的是,你永远不应该做 任何 关于名称的假设: kalzumeus.com/2010/06/17/... - Lindsey D


答案:


你应该用 split 方法:

'Paul Steve Panakkal'.split(' '); // retutrns ["Paul", "Steve", "Panakkal"]

你可以这样使用它:

'Paul Steve Panakkal'.split(' ').slice(0, -1).join(' '); // returns "Paul Steve"
'Paul Steve Panakkal'.split(' ').slice(-1).join(' '); // returns "Panakkal"

所以共同点:

var firstName = fullName.split(' ').slice(0, -1).join(' ');
var lastName = fullName.split(' ').slice(-1).join(' ');

83
2017-09-09 16:31



非常感谢你。有效。 - Subin
这个问题 .split(" ").slice(0, -1).join(' ') 对于名字来说,如果字符串只包含一个字母,则它无法给出名字。 - Hengjie
使用你的方法名字将是“保罗史蒂夫”和姓氏“Panakkal”。如果想要名字是“Paul”和姓氏“Steve Panakkal” - 这意味着姓氏将是第一个空格之后的所有内容。怎么做? - Leandro Faria
如果他们有两个(极有可能)或四个名字(不是那么多),这个解决方案将如何运作? - Kumar
另外,如果有一个领先的空白区会发生什么?在分割/切片之前“修剪”字符串是个好主意..就像这样 str.replace(/\s+/g, '') - lsimonetti


是:

var fullName = "Paul Steve Panakkal".split(' '),
    firstName = fullName[0],
    lastName = fullName[fullName.length - 1];

参考文献:


27
2017-09-09 16:31



获得比其他人更有效的解决方案+1 - Ali Gangji
如果您只使用“Paul”作为全名,它将使用Paul作为名字和姓氏...... - Michael


我想,是时候开始使用正则表达式了:)

"Paul Steve Panakkal".split(/(\s).+\s/).join("") // "Paul Panakkal"

7
2017-09-09 22:09





在西班牙语中它可能很棘手,因为你可能有第二个可选名称甚至复杂的姓氏,如“del Bosque”或“de la Hoya”,带有重音符号的元音和 ñ。以下javascript可以解析一个完整的西班牙语名称,计算你正在写它尊重大小写的情况。它将返回一个json给你

  1. 名称:1或2个主要名称
  2. :主要的姓氏
  3. secondLastName:第二个姓氏

代码是:

function parseName(input) {
        var fullName = input || "";
        var result = {};

        if (fullName.length > 0) {
            var nameTokens = fullName.match(/[A-ZÁ-ÚÑÜ][a-zá-úñü]+|([aeodlsz]+\s+)+[A-ZÁ-ÚÑÜ][a-zá-úñü]+/g) || [];

            if (nameTokens.length > 3) {
                result.name = nameTokens.slice(0, 2).join(' ');
            } else {
                result.name = nameTokens.slice(0, 1).join(' ');
            }

            if (nameTokens.length > 2) {
                result.lastName = nameTokens.slice(-2, -1).join(' ');
                result.secondLastName = nameTokens.slice(-1).join(' ');
            } else {
                result.lastName = nameTokens.slice(-1).join(' ');
                result.secondLastName = "";
            }
        }

        return result;
}

如果要指定第二个名称,则需要姓氏。尝试一下:

  • EliecerHernándezGarbey
  • 奥斯卡德拉霍亚
  • JoséJulianMartíPérez
  • ManueldeCéspedesdelCastillo
  • CalixtoGarcíaÍñiguez

即使尝试复杂的喜欢

  • Maríadela Caridad del Bosque和Loynáz

评论您的体验。


6
2017-10-19 21:34





如果你假设最后一个单词是姓氏,单个单词名也是姓,那么...

var items = theName.split(' '),
    lastName = items[items.length-1],
    firstName = "";

for (var i = 0; i < items.length - 1; i++) {
   if (i > 0) {
      firstName += ' ';
   }
   firstName += items[i];
}

3
2017-09-09 16:31





Speransky Danil的扩展版本的答案,它处理所提供的字符串中只有一个字的情况。

/**
 * Gets the first name, technically gets all words leading up to the last
 * Example: "Blake Robertson" --> "Blake"
 * Example: "Blake Andrew Robertson" --> "Blake Andrew"
 * Example: "Blake" --> "Blake"
 * @param str
 * @returns {*}
 */
exports.getFirstName = function(str) {
    var arr = str.split(' ');
    if( arr.length === 1 ) {
        return arr[0];
    }
    return arr.slice(0, -1).join(' '); // returns "Paul Steve"
}

/**
 * Gets the last name (e.g. the last word in the supplied string)
 * Example: "Blake Robertson" --> "Robertson"
 * Example: "Blake Andrew Robertson" --> "Robertson"
 * Example: "Blake" --> "<None>"
 * @param str
 * @param {string} [ifNone] optional default value if there is not last name, defaults to "<None>"
 * @returns {string}
 */
exports.getLastName = function(str, ifNone) {
    var arr = str.split(' ');
    if(arr.length === 1) {
        return ifNone || "<None>";
    }
    return arr.slice(-1).join(' ');
}

3
2017-11-30 04:34





我尝试下面的代码,它对我来说很酷

var full_name = 'xyz abc pqr';
var name = full_name.split(' ');
var first_name = name[0];
var last_name = full_name.substring(name[0].length.trim());

在上面的例子中:

(1)

If full_name = 'xyz abc pqr';
first_name = "xyz";
last_name = "abc pqr";

(2)

If `full_name = "abc"`:
Then first_name = "abc";
and last_name = "";

3
2018-06-15 07:05



它应该是 full_name.substring(name[0].length).trim(); 最后有修剪功能 - davidivad


使用此代码:

你需要改变这条线: splitFullName("firstName","lastName","fullName"); 并确保它包含表单中的正确字段ID。


function splitFullName(a,b,c){
    String.prototype.capitalize = function(){
        return this.replace( /(^|\s)([a-z])/g , function(m,p1,p2){ return p1+p2.toUpperCase(); } );
    };
    document.getElementById(c).oninput=function(){
        fullName = document.getElementById(c).value;
        if((fullName.match(/ /g) || []).length ===0 || fullName.substring(fullName.indexOf(" ")+1,fullName.length) === ""){
            first = fullName.capitalize();;
            last = "null";
        }else if(fullName.substring(0,fullName.indexOf(" ")).indexOf(".")>-1){
            first = fullName.substring(0,fullName.indexOf(" ")).capitalize() + " " + fullName.substring(fullName.indexOf(" ")+1,fullName.length).substring(0,fullName.substring(fullName.indexOf(" ")+1,fullName.length).indexOf(" ")).capitalize();
            last = fullName.substring(first.length +1,fullName.length).capitalize();
        }else{
            first = fullName.substring(0,fullName.indexOf(" ")).capitalize();
            last = fullName.substring(fullName.indexOf(" ")+1,fullName.length).capitalize();
        }
        document.getElementById(a).value = first;
        document.getElementById(b).value = last;
    };
    //Initial Values
    if(document.getElementById(c).value.length === 0){
        first = document.getElementById(a).value.capitalize();
        last = document.getElementById(b).value.capitalize();
        fullName =  first + " " + last ;
        console.log(fullName);
        document.getElementById(c).value = fullName;
    }
}

//Replace the ID's below with your form's field ID's
splitFullName("firstName","lastName","fullName");

资源: http://developers.marketo.com/blog/add-a-full-name-field-to-a-marketo-form/


2
2017-12-22 16:22





注意边缘情况,例如只提供一个名字或输入两个或多个空格。如果您只想解析名字和姓氏,这将解决问题(全名应始终包含至少1个字符,以避免first_name被设置为空字符串):

var full_name_split = "Paul Steve Panakkal".split(" ");
var first_name = full_name_split[0];
var last_name = full_name_split.length > 1 ? full_name_split[full_name_split.length - 1] : null;

2
2017-07-05 20:48