it-swarm.com.ru

Разделите Имя и Фамилию, используя JavaScript

У меня есть пользователь с именем Пол Стив Панаккал . Это длинное имя, которое не подходит для контейнера div. Так или иначе, есть ли разделить имя и фамилию из него с помощью JavaScript или JQuery.

Имя получено из PHP в переменную в JavaScript. Затем это разделяется с помощью JS.

30
Subin

Вы должны использовать метод 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(' ');
87
Danil Speransky

Да:

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

Рекомендации:

32
David Thomas

Думаю, пора начинать с регулярных выражений :) 

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

На испанском языке это может быть сложно, потому что у вас может быть второе необязательное имя и даже сложные фамилии, такие как «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;
}

Фамилии требуются, если вы собираетесь указать второе имя. Попробуйте это с:

  • Элисер Эрнандес Гарби 
  • Оскар де ла Хойя 
  • Хосе Джулиан Марти Перес
  • Мануэль де Сеспедес-дель-Кастильо 
  • Каликсто Гарсия Иньигес

Даже попробовать сложный, как

  • Мария де ла Каридад дель Боске и Лойнас

Прокомментируйте свой опыт с этим.

7
EliuX

Расширенная версия ответа Сперанского Данила, которая обрабатывает случай, когда в поставляемой строке есть только одно Слово.

/**
 * 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
blak3r

если вы предполагаете, что последнее слово является фамилией, а имя отдельного слова также является фамилией, то ...

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
Visual Micro

Я попробовал ниже код, и он работает круто для меня

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
Akash Jain

Остерегайтесь Edge-падежей, например, указывайте только имя или вводите два или более пробелов. Если вы хотите разобрать только имя и фамилию, это поможет (полное имя всегда должно содержать как минимум 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
Nick Schwab

Используйте этот код:

Вам нужно изменить строку: splitFullName("firstName","lastName","fullName"); и убедиться, что она содержит правильные идентификаторы полей из вашей формы.


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
Yanir Calisar

Вам не нужно использовать какой-либо метод split и создавать ненужные массивы для этой операции. Просто используйте lastIndexOf и substring методы javascript.

var s = "Paul Steve Panakkal";
var a = s.lastIndexOf(' '); // last occurence of space
var b = s.substring(0, a); // Paul Steve
var c = s.substring(a+1); // Panakkal
1
nonkertompf

const fullName = 'Paul Steve Panakkal'.split(' ');
const lastName = fullName.pop(); // 'Panakkal'
const firstName = fullName.join(' '); // 'Paul Steve'
console.log(firstName);
console.log(lastName);

0
dayitv89
var fullName = "Paul Steve Panakkal";

Вы можете использовать функцию разделения, чтобы разделить полное имя, а затем результат, как отображение элементов в массиве или списке.

Это то, что происходит, когда вы используете функцию разделения.

fullName.split(" ")

["Paul", "Steve", "Panakkal"]

Это не сохраняется ни в одну переменную. Вы можете выполнить функцию разбиения и назначить элемент четко определенной переменной, как эта.

var firstName = fullName.split(" ")[0];

var lastName = fullName.split(" ")[1];

var otherName = fullName.split(" ")[2];
0
Josh

используйте JS split с пробелом в качестве разделителя.

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/split

0
techie_28

Таким образом, firstName и lastName всегда верны

var names = fullName.split(' ');
if (!names || names.length <= 1) {
   firstName = this.name;
   lastName = '';
} else {
   firstName = names.slice(0, -1).join(' ');
   lastName = names.slice(-1).join(' ');
}
0
Philippe Genois

Комментатор сказал: «Что, если хотите, чтобы имя было« Пол », а фамилия« Стив Панаккал »? 

var name = "Paul Steve Panakkal" // try "Paul", "Paul Steve"
var first_name = name.split(' ')[0]
var last_name = name.substring(first_name.length).trim()
console.log(first_name)
console.log(last_name)

0
Marius Andreiana

Если вы имеете в виду, что фамилия - это все имена после имени, просто используйте:

var name = "Paul Steve Panakkal";
var arrName = name.split(" ");
var firstName = arrName.slice(0, 1).join(' ');
var lastName = arrName.slice(1, arrName.length).join(' ');
0
Marcelo Batemarchi
var firstName = fullName.split(" ")[0];
0
Hasan Tuna Oruç