- ベストアンサー
文字列の長さの数え方
input type=textに入力された文字の長さを 数えたいと思います。 入力には、全角も半角もOkにしたいのですが、 DB(oracle)に登録する為、バイト数のチェックを したいのですが、lengthだけではうまくチェックしきれません。 入力された内容の文字数、バイト数のチェックする方法を 教えて下さい。 宜しくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
IEの場合、escape関数というUnicodeを返す関数があるので Unicodeを見て全角か半角であるかを判別できます。 ネスケの場合確かASCIIコードの16進数表示で帰ってくるので 注意する必要があります。
その他の回答 (1)
- nipotan
- ベストアンサー率59% (134/227)
JavaScript の length は、マルチバイト文字を 1 文字とカウントしちゃうんで、こういう場合はキツイですよね。 私が普段常用している関数は以下のようなものです。 よかったらお試しください。 --- function string_length(str) { var length = 0; str = escape(str); var i = 0; for(; i < str.length; i++){ if(str.charAt(i) == '%'){ // UNICODE 対応 (IE) if(str.charAt(i + 1) == 'u'){ i += 4; length++; }else{ // IE 以外の場合 i++; } i++; } length++; } return length; } --- ためしに、 var length = string_length('文字列'); とやれば、length には、6 が入ります。 もちろん、string_length に渡す文字はフォームの値でも OK です。 ex) var length = string_length(document.form.text.value); これは escape() でマルチバイト文字の判別を行っています。 escape() を使った際に UNICODE で返すブラウザ (IE) に対応もしているので、IE 及び NN で動作確認済みです。 注意点としては Oracle に insert する文字コードと、ブラウザウィンドウ (上記 js を使用する HTML) を同じ文字コードにしないと、一部の文字コード (例えば半角カナ) 等を、実際に Oracle に入れる時に、長さを誤って判定してしまいますので、お気をつけ下さい。
お礼
回答ありがとうございました。 VBとかだとコマンドがあるんですけどねぇ。 やっぱりコマンド一つではいかないのでね。 関数の方ありがとうございます。早速試してみます。
お礼
早速回答ありがとうございます。 いきなり2件も回答いただけるなんて・・・ 頑張って試してみます。