jquery 7位和16位短信字符计算器
jquery SMS character calculator with 7-bit and 16bit
我有一个文本字段可以用英文和中文输入短信。正如我搜索的那样,1 条短信只能有 1120 位。每个英文字符是 7 位,所以它可以是 1120/7 = 160 个字符,对于中文,每个字符是 16 位,所以是 1120/16 = 70 个字符。我需要使用 jquery 来显示文本字段下的已写字词和剩余字词。我该怎么做呢?
看看下面的代码片段,它计算了总字符数和消息总数。
你可以把$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>
字符可以是单字节、双字节、三字节等。因此,在特定 range.Same 中遵循单个字节对于其他 characters.Based 是正确的 我创建了以下函数,这些函数将根据内存
计算字符串的大小
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 fiddle。
http://jsfiddle.net/paraselixir/d83oaa3v/6/
我们可以使用一个包来解决这个问题,结帐:https://github.com/danxexe/sms-counter
我有一个文本字段可以用英文和中文输入短信。正如我搜索的那样,1 条短信只能有 1120 位。每个英文字符是 7 位,所以它可以是 1120/7 = 160 个字符,对于中文,每个字符是 16 位,所以是 1120/16 = 70 个字符。我需要使用 jquery 来显示文本字段下的已写字词和剩余字词。我该怎么做呢?
看看下面的代码片段,它计算了总字符数和消息总数。
你可以把$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>
字符可以是单字节、双字节、三字节等。因此,在特定 range.Same 中遵循单个字节对于其他 characters.Based 是正确的 我创建了以下函数,这些函数将根据内存
计算字符串的大小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 fiddle。 http://jsfiddle.net/paraselixir/d83oaa3v/6/
我们可以使用一个包来解决这个问题,结帐:https://github.com/danxexe/sms-counter