jquery SMS калькулятор символов с 7-битным и 16-битным

У меня есть текстовое поле для ввода смс сообщения на английском и китайском языках. Как я искал, 1 смс может иметь только 1120 бит. Каждый английский символ является 7-битным, поэтому он может быть 1120/7 = 160 символов, а для китайского языка каждый символ равен 16 битам, то есть 1120/16 = 70 символов. Мне нужно использовать jquery, чтобы показать написанные слова и слова, оставшиеся под текстовым полем. Как мне это сделать?

3 ответа

Решение

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

function getByteLength(normal_val) {
    // Force string type
    normal_val = String(normal_val);

    var byteLen = 0;
    for (var i = 0; i < normal_val.length; i++) {
        var c = normal_val.charCodeAt(i);
        byteLen +=  c < (1 <<  7) ? 1 :
                    c < (1 << 11) ? 2 :
                    c < (1 << 16) ? 3 :
                    c < (1 << 21) ? 4 :
                    c < (1 << 26) ? 5 :
                    c < (1 << 31) ? 6 : Number.NaN;
    }
    return parseInt(byteLen)*8;
} 

Я создал скрипку JS, которая будет работать для вас. http://jsfiddle.net/paraselixir/d83oaa3v/6/

Взгляните на фрагмент ниже, он подсчитывает общее количество символов и общее количество сообщений.

Вы можете изменить значение $maxVal до 160/70

$(document).ready(function () {

var $remaining = $('#charNum'),
    $messages = $remaining.prev();
    $maxVal = 160;

$('.word-counter').keyup(function(){
    var chars = this.value.length,
        messages = Math.ceil(chars / $maxVal),
        remaining = messages * $maxVal - (chars % (messages * $maxVal) || messages * $maxVal);

    $remaining.text(remaining + ' characters remaining');
    $messages.text(messages + ' message(s) / ');
});




});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea name="" id="SMSMessage" cols="30" rows="2" class="form-ctrl word-counter foo-value"></textarea>
<span class="error-message word-counter">0  message(s) / </span><span id="charNum" class="error-message">160 characters remaining</span>

Есть пакет, который мы можем использовать для этой проблемы, извлечение: https://github.com/danxexe/sms-counter

Другие вопросы по тегам