PHP — как я считаю числовой символ и строковый символ, чтобы проверить значение длины имени пользователя?

#php #string #yii

#php #строка #yii

Вопрос:

как посчитать числовой символ в сочетании с string символом в php? если я использую strlen , это только считается string . Я хочу ограничить username вводимое значение только 20 символами, если я ввожу только 20 или более string , этот код работает, но если я ввожу (например: Admin123Admin123Admin123), это не работает, мой ввод проверки завершается ошибкой.

у меня есть код в useraccount контроллере yii 2, подобный этому :

         // new user

        if ( $username != '' amp;amp; $password != '' amp;amp; intval($group) > 0 amp;amp; !$exist)
        {
            $myFunctions    = new userFunctions;
            $exist = $myFunctions->isUserNameExist( $username );
            $isValid = $myFunctions->isValidPassword( $password );
            $checkUsername = strlen($username);
            // $temp = str_split($username); // Convert a string to an array by each character
            // // if don't want the spaces
            // $temp = array_filter($temp); // remove empty values
            // $checkUsername = count($temp);

            if ( $isValid == 0 amp;amp; !$exist)
            {
                $result = $myFunctions->saveNewUser( $username, $password, $group, $expired );
                $error =  ( $result ) ? 0 : 1;
            } 
            else if( $exist )
            {
                $error = 3;
            }
            else $error = 2;
        }
    }

    echo yiihelpersJson::encode(['result' => $result, 'error' => $error, 'checkUsername' => $checkUsername ]);
  

это мой код в поле зрения :

                 function saveNewUsers()
                {
                    $.ajax({
                                type     :'POST',
                                dataType : 'json',
                                data     : { id: $('#hiUserID').val(), username : $('#txtUsername').val(), password: $('#txtPassword1').val(), group: $('#cbUserGroup').val(), expired: $('#cbExpired').val() },
                                url  : '" . Yii::$app->getUrlManager()->createAbsoluteUrl('useraccount/saveuser') . "',
                                success  : function(response) {
                                    if ( !response.result ) {
                                        if ( response.error == 2 )
                                        {
                                            $('#errorMessageUser').html(DecodeEntities('{$myLabels[20]}.')).show();
                                        }
                                        else if( response.error == 3 )
                                        {
                                            $('#errorMessageUser').html(DecodeEntities('{$myLabels[56]}.')).show(); 
                                        }
                                        else if( response.checkUsername > 20)
                                        {
                                            $('#errorMessageUser').html(DecodeEntities('{$myLabels[57]}.')).show();     
                                        }
                                        else $('#errorMessageUser').html(DecodeEntities('{$myLabels[22]}.')).show();
                                    }
                                    else {      
                                        $('#errorMessageUser').html('').hide();
                                        $('#myUserModal').modal('hide');
                                        $.pjax.reload({container:'#myPjax',timeout:false});


                                    }   
                                }                       
                    });
                }
  

итак, как считать числовой и строковый символы в php? я действительно новичок в php, спасибо за помощь, и я надеюсь, что здесь есть предложения от наших программистов. Извините за мой плохой английский.

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

1. strlen не работает для подсчета числовых значений.

2. Покажите пример, как у меня. Admin123Admin123Admin123 24 символа, поэтому он не должен работать..

Ответ №1:

я уже нашел ответ, да, спасибо за chris 85, strlen не проблема, но проблема в контроллере, это я меняю свой код :

 if ( $username != '' amp;amp; $password != '' amp;amp; intval($group) > 0 amp;amp; !$exist)
        {
            $myFunctions    = new userFunctions;
            $exist = $myFunctions->isUserNameExist( $username );
            $isValid = $myFunctions->isValidPassword( $password );
            $checkUsername = strlen($username);
            // var_dump($checkUsername); die();

            if ( $isValid == 0 amp;amp; !$exist amp;amp; $checkUsername <= 20)
            {
                $result = $myFunctions->saveNewUser( $username, $password, $group, $expired );
                $error =  ( $result ) ? 0 : 1;
            }
            elseif ($checkUsername > 20 ) 
            {
                $error = 99;
            } 
            else if( $exist )
            {
                $error = 3;
            }
            else $error = 2;
        }
  

и в таком виде :

 function saveNewUsers()
                {
                    $.ajax({
                                type     :'POST',
                                dataType : 'json',
                                data     : { id: $('#hiUserID').val(), username : $('#txtUsername').val(), password: $('#txtPassword1').val(), group: $('#cbUserGroup').val(), expired: $('#cbExpired').val() },
                                url  : '" . Yii::$app->getUrlManager()->createAbsoluteUrl('useraccount/saveuser') . "',
                                success  : function(response) {
                                    if ( !response.result ) {
                                        if ( response.error == 2 )
                                        {
                                            $('#errorMessageUser').html(DecodeEntities('{$myLabels[20]}.')).show();
                                        }
                                        else if( response.error == 3 )
                                        {
                                            $('#errorMessageUser').html(DecodeEntities('{$myLabels[56]}.')).show(); 
                                        }
                                        else if( response.error == 99)
                                        {
                                            $('#errorMessageUser').html(DecodeEntities('{$myLabels[57]}.')).show();     
                                        }
                                        else $('#errorMessageUser').html(DecodeEntities('{$myLabels[22]}.')).show();
                                    }
                                    else {      
                                        $('#errorMessageUser').html('').hide();
                                        $('#myUserModal').modal('hide');
                                        $.pjax.reload({container:'#myPjax',timeout:false});
                                    }   
                                }                       
                    });
                }
  

спасибо за помощь, наконец-то я получил ответ.