Paul Steve Panakkalという名前のユーザーがいます。div コンテナに収まらない長い名前です。JavaScriptまたはjQueryを使用して、名前と姓を分割する方法はありますか?
名前は、PHP から JavaScript の変数に取得されます。これは、JS を使用して分割されます。
Paul Steve Panakkalという名前のユーザーがいます。div コンテナに収まらない長い名前です。JavaScriptまたはjQueryを使用して、名前と姓を分割する方法はありますか?
名前は、PHP から JavaScript の変数に取得されます。これは、JS を使用して分割されます。
String.prototype.split()
次の方法を使用する必要があります。
'Paul Steve Panakkal'.split(' '); // returns ["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(' ');
はい:
var fullName = "Paul Steve Panakkal".split(' '),
firstName = fullName[0],
lastName = fullName[fullName.length - 1];
参照:
スペイン語では、オプションの 2 番目の名前や、"del Bosque" や "de la Hoya" などの複雑な姓、アクセント記号付きの母音、およびñがある場合があるため、注意が必要です。次の JavaScript は、完全なスペイン語名を解析することができます。大文字と小文字を区別して書いているとカウントされます。それはあなたに与えるjsonを返します
コードは次のとおりです。
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;
}
2 番目の名前を指定する場合は、姓が必要です。試してみてください:
次のような複雑なものを試してみてください
あなたの経験をコメントしてください。
正規表現を始める時が来たと思います:)
"Paul Steve Panakkal".split(/(\s).+\s/).join("") // "Paul Panakkal"
以下のコードを試してみましたが、うまく機能します
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 = "";
コメンターは、名を「ポール」、姓を「スティーブ・パナカル」にしたい場合はどうすればよいかと言った
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)
提供された文字列に単語が1つしか含まれていない場合を処理する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(' ');
}
最後の単語が最後の名前であり、単一の単語の名前も最後の名前であると仮定すると、...
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];
}
名だけが提供されている、または 2 つ以上のスペースが入力されているなどの特殊なケースに注意してください。姓と名のみを解析したい場合は、これでうまくいきます (first_name が空の文字列に設定されるのを避けるために、フルネームには常に少なくとも 1 文字を含める必要があります)。
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;
次のコードを使用します。
行を変更する必要があります: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/
splitメソッドを使用する必要はなく、その操作のために不要な配列を作成します。javascript のlastIndexOfおよびsubstringメソッドを使用するだけです。
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
split
区切り文字としてスペースを指定してJSを使用します。
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/split
姓が名の後のすべての名前であることを意味する場合は、次のように使用します。
var name = "Paul Steve Panakkal";
var arrName = name.split(" ");
var firstName = arrName.slice(0, 1).join(' ');
var lastName = arrName.slice(1, arrName.length).join(' ');