0

我必须编写一个 JavaScript 函数来验证输入的文本是否为双字节。文本框应该只接受双字节日文字符、双字节英文字符和双字节特殊字符。我尝试使用其他博客中提供的许多解决方案,但验证针对单字节英文或单字节日文字符触发,即验证针对单字节英文字符触发良好,而针对单字节日文失败。

4

1 回答 1

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 fiddle,它将根据内存确定输入文本的大小。

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

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

所以如果字符串有 x 个字符并且内存大小是 x 那么所有字符都是单字节如果字符串有 x 个字符并且内存大小是 2x 那么所有字符都是双字节。如果字符串有 x 个字符并且内存大小在 x 和 2x 之间,那么所有字符都是单字节和双字节的组合。

于 2017-03-10T05:00:40.507 回答