みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ジャバスクリプトについて質問です。

ジャバスクリプトでテキストエリアに入力した文字数を表示したいのですが半角数でカウントは出来ませんか?

<html>
<head>
<title>チェック</title>
<script type="text/javascript"><!--
function tyek( str ) {


document.getElementById("inputlength").

innerHTML = str.length + "文字";
}
// --></script>

</head>
<body>


<textarea cols="40" rows="9"

onkeyup="tyek(value);"></textarea>
<p id="inputlength">0文字</p>
<br>
</body>
</html>
上記の設定では全角も一文字、半角も一文字でカウントされます。

aあ ⇒2文字

これを半角一文字、全角二文字という風に設定したいのですがどうすればいいのでしょうか?まだスクリプトを勉強しだしたばかりでよく分かりません…
回答の方宜しくお願い致します。

投稿日時 - 2009-05-04 21:39:00

QNo.4931421

すぐに回答ほしいです

質問者が選んだベストアンサー

> これを半角一文字、全角二文字という風に設定したいのですがどうすればいいのでしょうか?

JavaScriptで扱っている文字はUTF-8ですが、UTF-8における「半角カナ」は、1バイトではなく3バイトですので、
fromCharCodeAt()で1文字ずつ文字コードを取得して、
半角文字に含まれる文字コードなら「半角1文字」、それ以外なら「全角1文字」として数えるしかないと思います。

改行やスペースなどの「表示されない文字」は一般的には0文字ですが、
データとして入っていますので、それを1文字とするか0文字とするかも、文字コードから確認するしかないと思います。
This is a pen. -> 11文字? 14文字?


<script charset="Shift_JIS" src="test.js">という指定が、HTML、JavaScriptの文法上は可能ですが、
殆どのブラウザが、charsetが未実装のようで、"ア".charCodeAt(0)はShift_JISの0xB1になりません。

*BBSの仕様上、投稿時に半角カナが全角に変換されるようです

投稿日時 - 2009-05-07 06:47:19

ANo.3

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

function tyek( str ) {
var hc = str.match( /[\u0009\u000B\u0020-\u007E\uFF61-\uFF9F]/g ) || [];
var rc = str.match( /(:?\u000D|\u000A|\u000D\u000A)/g ) || [];
document.getElementById( 'inputlength' ).innerHTML = ( str.length - rc.length ) * 2 - hc.length + '文字';
}

投稿日時 - 2009-05-10 02:05:01

ANo.2

テキストエリアで処理する場合は改行文字なども注意が必要
また、3バイト文字などもあるので「バイト数」ではないですし
文字数でもないので、なんというべきかは微妙ですね

投稿日時 - 2009-05-05 10:49:42

あなたにオススメの質問