检测双字节字符

时间:2013-09-20 09:24:32

标签: javascript dynamics-crm-2011 crm dynamics-crm-4

我必须编写一个JavaScript函数来验证输入的文本是否为双字节。文本框应该只接受双字节日文字符,双字节英文字符和双字节特殊字符。我尝试使用其他博客中提供的一些解决方案,但是对于单字节英语或单字节日语字符进行了验证,即对单字节英文字符进行了验证,对单字节日语字符进行了验证。

1 个答案:

答案 0 :(得分:0)

字符可以是单字节,双字节,三字节等。因此,单个字节在特定范围内。对于其他字符也是如此。基于此,我创建了以下函数,它们将根据内存计算字符串的大小

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

我创建了一个js小提琴,它将根据内存确定输入文本的大小。

http://jsfiddle.net/paraselixir/d83oaa3v/5/

在您的情况下,您可以使用字符串的内存大小来确定双字节 -

因此,如果字符串有x个字符且内存大小为x,那么所有字符都是单个字节 如果string有x个字符且内存大小是2x则所有字符都是双字节。 如果字符串有x个字符且内存大小介于x和2x之间,则所有字符都是单字节和双字节的组合。