web-dev-qa-db-fra.com

Nom et prénom scindés en javascript

J'ai un utilisateur avec un nom Paul Steve Panakkal . C'est un nom long, il ne correspondra pas au conteneur div. Donc, est-il quand même possible de scinder le prénom et le nom en utilisant JavaScript ou jQuery.

Le nom provient de PHP dans une variable en JavaScript. Ceci est ensuite divisé en utilisant JS.

30
Subin

Vous devriez utiliser la méthode split:

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

Vous pouvez l'utiliser de cette façon:

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

Donc en commun:

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

Oui:

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

Références:

32
David Thomas

Je pense qu'il est temps de commencer avec les expressions régulières :) 

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

En espagnol, cela peut être délicat, car vous pouvez avoir un deuxième nom facultatif et même des noms complexes, tels que "del Bosque" ou "de la Hoya", les voyelles avec accent et le ñ. Le javascript suivant est capable d’analyser un nom espagnol complet et de l’avoir écrit en respectant les majuscules et les minuscules. Il va retourner un JSON vous donnant

  1. nom : 1 ou 2 noms principaux
  2. lastName : le nom de famille principal
  3. secondLastName : Le deuxième nom de famille

Le code est:

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;
}

Les noms de famille sont obligatoires si vous souhaitez spécifier un deuxième nom. Essayez-le avec:

  • Eliecer Hernández Garbey 
  • Oscar de la Hoya 
  • José Julian Martí Pérez
  • Manuel de Céspedes del Castillo 
  • Calixto García Íñiguez

Même essayer un complexe comme

  • María de la Caridad del Bosque et Loynáz

Commentez vos expériences avec elle.

7
EliuX

Version étendue de la réponse de Speransky Danil qui traite le cas où la chaîne fournie ne contient qu'un mot.

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

si vous supposez que le dernier mot est le nom de famille et qu'un nom de mot unique est également un nom de famille,.

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

J'ai essayé ci-dessous le code et ça marche bien pour moi

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());

Dans l'exemple ci-dessus:

(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

Méfiez-vous des cas Edge, comme seul le prénom fourni ou deux espaces ou plus étant entrés. Si vous souhaitez uniquement analyser le prénom et le nom, procédez comme suit (le nom complet doit toujours contenir au moins 1 caractère pour éviter que le prénom nom ne soit défini sur une chaîne vide):

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

Utilisez ce code:

Vous devez modifier la ligne: splitFullName("firstName","lastName","fullName"); et vous assurer qu'elle comprend les bons identifiants de champ de votre formulaire.


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");

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

2
Yanir Calisar

Vous n'avez pas besoin d'utiliser une méthode split et de créer des tableaux inutiles pour cette opération. Utilisez simplement lastIndexOf et substring method of 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";

Vous pouvez utiliser la fonction split pour scinder le nom complet puis le résultat, comme pour afficher des éléments dans un tableau ou une liste.

C'est ce qui se passe lorsque vous utilisez la fonction split.

fullName.split(" ")

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

Ceci n'est enregistré dans aucune variable. Vous pouvez exécuter la fonction split et affecter un élément à une variable bien définie comme celle-ci.

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

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

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

De cette façon, firstName et lastName sont toujours corrects

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

Un comenter a dit Que faire si son prénom était "Paul" et son nom "Steve Panakkal" 

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

Si vous voulez dire que le nom de famille correspond à tous les noms après le prénom, utilisez simplement:

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ç