web-dev-qa-db-ja.com

JavaScriptを使用して名と姓を分割する

Paul Steve Panakkalという名前のユーザーがいます。 divコンテナに収まらない長い名前です。とにかく、javascriptまたはjqueryを使用して、姓と名を分けることはできます。

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

39
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(' ');
99
Danil Speransky

はい:

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

参照:

36
David Thomas

私は、正規表現を始める時だと思う:)

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

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

  • エリーサー・エルナンデス・ガルベイ
  • オスカーデラホヤ
  • ホセ・ジュリアン・マルティ・ペレス
  • マヌエルデセスペデスデルカスティージョ
  • カリクスト・ガルシア・シニゲス

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

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

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

7
EliuX

提供された文字列に含まれるWordが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(' ');
}
3
blak3r

あなたが最後のWordが姓であり、単一のWord名も姓であると仮定すると...

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

名のみが入力されている、または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;
2
Nick Schwab

このコードを使用してください:

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

2
Yanir Calisar

参加者は、「名」を「ポール」、名字を「スティーブ・パナカル」にしたい場合

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

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

Split関数を使用して、フルネームを分割し、配列またはリストに要素を表示するなどの結果を分割できます。

これは、split関数を使用すると発生します。

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";
var arrName = name.split(" ");
var firstName = arrName.slice(0, 1).join(' ');
var lastName = arrName.slice(1, arrName.length).join(' ');
0
var firstName = fullName.split(" ")[0];
0