Попытка получить первые 5 символов ввода 1 и первый символ ввода 2

#jquery #if-statement #string-length

#jquery #if-оператор #длина строки

Вопрос:

Я пытаюсь сгенерировать имена пользователей для пользователей на основе существующей ручной формулы, которую мы используем: первые 5 символов фамилии, первый инициал имени.

Просто:

 $("#first_name, #last_name").keyup(function(){
    var a = $("#first_name").val().substring(0, 1),
        b = $("#last_name").val().substring(0, 5);

    $("#username").val(b a);
});
  

Тем не менее, я пытался выяснить правила, когда фамилия меньше 5 символов, а затем заполнить эти недостающие символы следующими буквами их имени. И, наконец, если имя фамилия в общей сложности меньше 5 символов, просто добавьте их.

Это было что-то вроде того, над чем я работал, но это не сработало, и я не могу понять, почему:

 $("#first_name, #last_name").keyup(function(){

    var a = $("#first_name").val(),
        b = $("#last_name").val();

    if( b < 5 ) {

        var c = ( 5 - b.length );

        if( c > a.length ) {
            var d = a.substring(0, c);
            $("#username").val( b   d );
        } else {

            $("#username").val( b   a );
        }

    } else {

        $("#username").val( b   a );

    }       
});
  

Ответ №1:

Я пытался разобраться в правилах…

Ключевым моментом здесь является фамилия. У вас есть только 2 случая, и это зависит от длины фамилии.

Когда вы знаете, что это меньше 5 символов. Используйте его как есть!
И используйте его длину, чтобы вычислить, сколько символов использовать из первого имени.

 $("#first_name, #last_name").keyup(function(){

  var a = $("#first_name").val(),
      b = $("#last_name").val();

  // Last name longer than 5 chars
  if( b.length >= 5 ) {
    a = a.substr(0,1);
    b = b.substr(0,5);
    
  // Last name shorter than 5 chars
  }else{
    a = a.substr(0,(5-b.length 1));  // That is at least 1   5 possible "replacements"...
  }

  $("#username").val( b   a );

});  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

First name: <input type="text" id="first_name"><br/>
Last name:  <input type="text" id="last_name"><br>
username: <input "type="text" id="username">  

Ответ №2:

Если последнее имя меньше 5, объедините их вместе и возьмите первые 6.

Если фамилия больше 5, возьмите первые 5 от фамилии плюс первый символ имени.

 $("#first_name, #last_name").keyup(function(){
    var a = $("#first_name").val().trim().toLowerCase().replace( / /g, ''),
        b = $("#last_name").val().trim().toLowerCase().replace( / /g, ''),
        c = '';
    
    if (!a || !b) return;
    
    if ( b < 5 ) {
        c = (b   a).substring(0, 6);
    } else {
        c = b.substring(0, 5)   a[0];
    }
    
    $("#username").val( c );
});  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="text" value="" id="first_name" placeholder="First Name">
<input type="text" value="" id="last_name" placeholder="Last Name">
<div><input type="text" id="username"></div>  

Комментарии:

1. спасибо вам за это, но, похоже, это не работает для пользователей с именем say: Ana Ng, где он должен выводить «ngana» вместо «nga»

2. @Ahhhhhhhhhhhhhdfgbv Добавил toLowerCase() пробелы и удалил пробелы.