62

Paul Steve Panakkalという名前のユーザーがいます。div コンテナに収まらない長い名前です。JavaScriptまたはjQueryを使用して、名前と姓を分割する方法はありますか?

名前は、PHP から JavaScript の変数に取得されます。これは、JS を使用して分割されます。

4

25 に答える 25

146

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(' ');
于 2012-09-09T16:31:28.727 に答える
44

はい:

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

参照:

于 2012-09-09T16:31:58.503 に答える
23

スペイン語では、オプションの 2 番目の名前や、"del Bosque" や "de la Hoya" などの複雑な姓、アクセント記号付きの母音、およびñがある場合があるため、注意が必要です。次の JavaScript は、完全なスペイン語名を解析することができます。大文字と小文字を区別して書いているとカウントされます。それはあなたに与えるjsonを返します

  1. name : 1 つまたは 2 つの主な名前
  2. lastName : 主な姓
  3. secondLastName : 2 番目の姓

コードは次のとおりです。

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 番目の名前を指定する場合は、姓が必要です。試してみてください:

  • ビセンテ・エルナンデス・プラネス
  • オスカー・デ・ラ・ホーヤ
  • ホセ・ジュリアン・マルティ・ペレス
  • マヌエル デ セスペデス デル カスティーヨ
  • カリスト・ガルシア・イニゲス

次のような複雑なものを試してみてください

  • マリア・デ・ラ・カリダード・デル・ボスケ・イ・ロイナーズ

あなたの経験をコメントしてください。

于 2016-10-19T21:34:30.643 に答える
16

正規表現を始める時が来たと思います:)

"Paul Steve Panakkal".split(/(\s).+\s/).join("") // "Paul Panakkal"
于 2012-09-09T22:09:14.803 に答える
4

以下のコードを試してみましたが、うまく機能します

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 = "";
于 2016-06-15T07:05:49.700 に答える
4

コメンターは、名を「ポール」、姓を「スティーブ・パナカル」にしたい場合はどうすればよいかと言った

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)

于 2016-12-21T10:47:19.350 に答える
4

提供された文字列に単語が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(' ');
}
于 2014-11-30T04:34:19.890 に答える
3

最後の単語が最後の名前であり、単一の単語の名前も最後の名前であると仮定すると、...

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];
}
于 2012-09-09T16:31:57.613 に答える
3

名だけが提供されている、または 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;
于 2016-07-05T20:48:40.583 に答える
2

次のコードを使用します。

行を変更する必要があります: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/

于 2014-12-22T16:22:24.513 に答える
2

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
于 2015-05-25T16:25:26.317 に答える
0

split区切り文字としてスペースを指定してJSを使用します。

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

于 2012-09-09T16:30:41.873 に答える
0

姓が名の後のすべての名前であることを意味する場合は、次のように使用します。

var name = "Paul Steve Panakkal";
var arrName = name.split(" ");
var firstName = arrName.slice(0, 1).join(' ');
var lastName = arrName.slice(1, arrName.length).join(' ');
于 2017-06-12T15:41:24.393 に答える