2017-03-10 21 views
1

Ich habe ein Textfeld, um SMS-Nachricht sowohl in englischer und chinesischer Sprache. Wie ich gesucht habe, kann 1 SMS nur 1120 Bits haben. Jedes englische Zeichen ist 7 Bit, also kann es 1120/7 = 160 Zeichen sein und für Chinesisch ist jedes Zeichen 16 Bit, also 1120/16 = 70 Zeichen. Ich muss jquery benutzen, um die geschriebenen Wörter und die Wörter zu zeigen, die unter dem Textfeld bleiben. Wie mache ich das?jquery SMS-Zeichen Rechner mit 7-Bit und 16bit

+0

so ein einziger Nachrichtentext entweder in Chinesisch oder in englischer Sprache Recht enthält? –

+0

@paraS elixiR Ja, erlauben Sie die Eingabe einer der beiden Sprachen. – Mikethetechy

Antwort

1

Charaktere können einzelne Byte, Doppel-Byte, Dreier- Byte sein ändern und so weiter. So einziges Byte folgt in einer bestimmten range.Same Sache gilt für andere characters.Based dazu habe ich folgende Funktionen erstellt, die die Größe eines Strings auf der Basis von Speicher berechnen wird

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

ich ein js erstellt haben Geige, die für dich arbeiten wird. http://jsfiddle.net/paraselixir/d83oaa3v/6/

+0

thx paraS elixiR ich werde durchgehen. – Mikethetechy

+0

Warum zählt es 1 Bit für ein Zeichen? soll nicht 8-bit für einen englischen Charakter sein? – Mikethetechy

+0

oh Entschuldigung, es zählt Speicher in Bytes früher, also habe ich den Rückgabewert mit 8 multipliziert. und aktualisierte auch die JFiddle. –

1

schauen Sie sich unten Schnipsel, dies zählt die Gesamtzahl der Zeichen und die Gesamtzahl der Nachrichten.

können Sie den Wert von $maxVal bis 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>

+0

thx aje für die Antwort, aber ich muss auch chinesische Zeichen zu erkennen – Mikethetechy