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.
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(' ');
Oui:
var fullName = "Paul Steve Panakkal".split(' '),
firstName = fullName[0],
lastName = fullName[fullName.length - 1];
Références:
Je pense qu'il est temps de commencer avec les expressions régulières :)
"Paul Steve Panakkal".split(/(\s).+\s/).join("") // "Paul Panakkal"
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
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:
Même essayer un complexe comme
Commentez vos expériences avec elle.
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(' ');
}
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];
}
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 = "";
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;
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/
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
const fullName = 'Paul Steve Panakkal'.split(' ');
const lastName = fullName.pop(); // 'Panakkal'
const firstName = fullName.join(' '); // 'Paul Steve'
console.log(firstName);
console.log(lastName);
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];
utilisez JS split
avec l'espace comme délimiteur.
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/split
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(' ');
}
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)
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(' ');
var firstName = fullName.split(" ")[0];