JSFiddle - React, Tailwind, and code Playground
JavaScript
var gsm7bitChars = "@£$¥èéùìòÇ\nØø\rÅåΔ_ΦΓΛΩΠΨΣΘΞÆæßÉ !\"#¤%&'()*+,-./0123456789:;<=>?¡ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÑܧ¿abcdefghijklmnopqrstuvwxyzäöñüà";
var gsm7bitExChar = "^{}\\[~]|€";
function smsCharCount(message) {
var gsm7bitUnits = 0;
var utf16codeUnits = 0;
for (var i = 0, len = message.length; i < len; i++) {
if (gsm7bitUnits != null) {
if (gsm7bitChars.indexOf(message.charAt(i)) > -1) {
gsm7bitUnits++;
} else if (gsm7bitExChar.indexOf(message.charAt(i)) > -1) {
gsm7bitUnits += 2;
} else {
gsm7bitUnits = null;
}
}
utf16codeUnits += message.charCodeAt(i) < 0x10000 ? 1 : 2;
}
return [gsm7bitUnits, utf16codeUnits];
}
alert(smsCharCount("Test Message"));
alert(smsCharCount("Test [Message]"));
alert(smsCharCount("您好,請問你吃飯了嗎?"));