动态创建用户名

时间:2014-10-07 14:19:16

标签: jquery split

我想根据具有jquery的人的名称创建用户名。

我不知道如何开始,我正在考虑拆分名称,从每个部分获取第一个字母并与姓氏连接。但如果这个名字有很多单词,我就不知道怎么做。

例如我的名字

'First' -> username 'first'
'First Second' -> username 'fsecond'
'First Second Third' -> username 'fsthird'

代码(只做第一种情况,但如果有很多中间名怎么办?)

function createUsername(fullName) {

   var piece;
   var size;

   piece = fullName.split(' ');
   size = piece.length;
   if(size == 1)
     $("#userName").val(piece[0]);
}


<input type='text' onKeyUp = 'createUsername(this.value)'/>
<input type='text' name='userName' id='userName' />

4 个答案:

答案 0 :(得分:2)

你可以这样做

function createUsername(name) {
    return name.split(" ").map(function(v, i, a) {
        return i !== (a.length - 1) ? v[0] : v;
    }).join().toLowerCase();
}

答案 1 :(得分:1)

你可以取你的split数组的姓氏,然后迭代它:

function createUsername(fullName) {

   var piece;
   var size;

   piece = fullName.split(' ');
   size = piece.length;
   var name = piece[size-1].toLowerCase();
   for (var i = size -2; i > 0; i--) {
       name = piece[i][0].toLowerCase() + name;
   }
   $("#userName").val(name);
}

答案 2 :(得分:1)

你在正确的轨道上,根据空格分割字符串以获取用户的名字,但之后你需要循环以获得姓氏前所有名字的第一个字母。

function createUsername(fullName) {

  var piece,
      username = [];

  piece = fullName.split(' ');

  if (piece.length > 1) {
    for (var i = 0; i < piece.length; i++) {
      if (i < piece.length - 1) {
        username.push(piece[i].charAt(0));
      } else {
        username.push(piece[i]);
      }
    }
  } else {
    username.push(piece[0]);
  }

  $("#userName").val(username.join(""));
}

Here's a CodePen example

答案 3 :(得分:1)

编辑,更新;添加了包括四个或更多单词的名称处理

尝试(v2)

  function createUserName(fullName) {
    var s = fullName.toLowerCase().match(/[a-z]+/g)
    , l = s.length, _s = "", y = -1;
      do { _s += s[++y][0] } while (_s.length < l -1);
          return l > 1 ? _s + s[l -1] : fullName;
  };

jsfiddle http://jsfiddle.net/guest271314/yfyogoqd/