【问题标题】:dynamically create user name动态创建用户名
【发布时间】:2014-10-07 14:19:16
【问题描述】:

我想用 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' />

【问题讨论】:

    标签: jquery split


    【解决方案1】:

    你可以这样做

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

    【讨论】:

      【解决方案2】:

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

      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】:

        您可以使用拆分数组的姓氏并像这样对其进行迭代:

        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);
        }
        

        【讨论】:

          【解决方案4】:

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

          尝试 (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/

          【讨论】:

          • 它适用于包含 3 个单词的名称,但如果名称包含四个或更多单词怎么办? Amit Joki 的回答工作正常。无论如何感谢您的帮助!
          • 查看更新后的帖子。添加了用于处理包含四个或更多单词的名称的部分。很乐意提供帮助,如果可以的话:) 谢谢
          猜你喜欢
          • 1970-01-01
          • 2020-05-12
          • 1970-01-01
          • 2018-05-16
          • 2021-10-26
          • 2011-10-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多