0

入力されたテキストが 2 バイトであるかどうかを検証する JavaScript 関数を作成する必要があります。テキスト ボックスは、2 バイトの日本語文字、2 バイトの英語の文字、および 2 バイトの特殊文字のみを受け入れる必要があります。他のブログで提供されている多くのソリューションを使用してみましたが、検証は 1 バイトの英語または 1 バイトの日本語の文字のいずれかで実行されました。つまり、検証は 1 バイトの英語の文字では正常に実行され、1 バイトの日本語では失敗しました。

4

1 に答える 1

0

文字は、1 バイト、2 バイト、3 バイトなどです。そのため、特定の範囲で 1 バイトが続きます。同じことが他の文字にも当てはまります。これに基づいて、メモリに基づいて文字列のサイズを計算する次の関数を作成しました

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/

ここでは、文字列のメモリサイズを使用して2バイトを決定できます-

したがって、文字列に x 文字があり、メモリ サイズが x の場合、すべての文字はシングル バイトです。文字列に x 文字があり、メモリ サイズが 2x の場合、すべての文字はダブル バイトです。文字列に x 個の文字があり、メモリ サイズが x ~ 2x の場合、すべての文字は 1 バイトと 2 バイトの組み合わせになります。

于 2017-03-10T05:00:40.507 に答える