テキストフィールド内にて、全角文字以外が入力されたらエラーをだすようにしています。そのとき以下のソースだと改行した時に、enterが半角とみなされてしまう現象が起こってしまいました。

function jstrlen(str) {
len = 0;
for (i = 0; i < str.length; i++) {
wrk = escape(str.substr(i,1));
if ((wrk.substr(0,2) == "%u") && (wrk < "%uFF71")) {
len++;
}
len++;
}
return len;
}

function isZen(str) {
len1 = jstrlen(str.value);
len2 = str.value.length * 2;
if(len1 != len2){
alert("半角文字が混在");
str.focus() ;
}else{
alert("全角文字のみ");
}

}

対処方法をどなたかよろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

<html>


<head>
<title></title>
</head>
<body>

<textarea id=tArea></textarea>

<script language="JavaScript">
function jstrlen(str) {
len = 0;
for (i = 0; i < str.length; i++) {
wrk = str.charCodeAt(i)+"";
if(wrk == 10 || wrk == 13)len++;
// 改行は↑でlenに1を足して、全角文字と同じ扱いする
alert(wrk)
if (wrk.length > 3) { // 2バイトの字なら
len++;
}
len++;
}
return len;
}

function isZen(str) {
len1 = jstrlen(str.value);
len2 = str.value.length * 2;
if(len1 != len2){
alert("半角文字が混在");
str.focus() ;
}else{
alert("全角文字のみ");
}

}
</script>

<button onClick=isZen(tArea)>くり</button>

</body>
</html>


escape( ) は IE と NN で動作が違うらしいから
2バイトの判定は charCodeAt( ) を使った。

問題のエンターは、エンターで改行コードの
13,10 がそれぞれ1バイトで半角文字になるから
13 または 10 の場合に特別な処理をした。

そのままのソースで escape( ) でやる場合でも
wrk の値が改行コードであったなら特別な処理を
してやれば問題は解決する。
    • good
    • 0
この回答へのお礼

ありがとうございました。無事対応できました。

お礼日時:2002/01/16 19:47

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QJavaScriptで【window.google={kHL:"ja"};】という記述はどういう意味?

JavaScriptで【window.google={kHL:"ja"};】という記述はどういう意味?


YOUTUBE日本語版
http://jp.youtube.com/
のHTMLソースを見ていたら、



<script type="text/javascript">
    window.google={kHL:"ja"};
</script>


という記述を目にしたのですがこれはどういう意味あいというか目的のものなのでしょうか?


教えていただければ幸いです。

Aベストアンサー

これは、window.googleに'kHL'というキー(値は'ja')を持つ連想配列を
作成しています。

JavaScriptでの連想配列は

var 変数名 = {
キー : '値',
キー : '値',
:,
キー : '値'
};

というような感じで作成します。
キーはダブルクォートまたはシングルクォートで囲まなくても
いいようです。

参考URL:http://javascriptist.net/docs/basic_hash.html,http://www.openspc2.org/JavaScript/kouza2007/array/hash/index.html

Q(function(){})()の意味

(function(){})() の意味がよくわからずに困っています。

下記の2タイプではどう意味が変わってくるのでしょうか?
(1)var fuga = function(){};
(2)var fuga = (function(){})();

下記のコードで実験してみたところ、
---------------------
var fuga = function(){
this.obj = 'value';
};

var fuga = (function(){
return {
obj = 'value';
};
})();
---------------------
(1)の場合は、newしないとfugaオブジェクトのメンバを使用できない、
(2)の場合は、newしなくてもfugaオブジェクトのメンバを使用できるようなのですが、
(2)で(function(){})を取り除いて出てくる()はnewのエイリアスだったりするのでしょうか?

Aベストアンサー

var fuga = (function(){})();

var fuga = function(){}();
と同じです
つまり関数を定義してすぐ呼んでいるだけです

Q&= ~0x0c; &= ~0x03; |=1;

JavaScriptで分からないコードがあるので教えてください。


■変数設定
var hoge = 0;


■変数格納
・キーを押した時の条件分岐
  ~なら hoge |= 1;
  または hoge |= 2;
  または hoge |= 3;
  または hoge |= 8;

・キーを離した時の条件分岐
  ~なら hoge &= ~0x0c;
  または hoge &= ~0x03;


■変数使用
・swithch文の条件分岐に利用
  (hoge&0x03)
  (hoge&0x0c)


■質問
・どういう意味でしょうか?
・文字コード?
・ビット演算?

Aベストアンサー

ビット演算してるわね

x = x + a

x += a
って書くことができるの

つまり
hoge |= 1

hoge = hoge | 1
のことね

~はNOTのこと

0x
はアスキーコードの16進数表記ねきっと

0x0c は改ページを意味していて
0x03 は文章の最後を意味している
と思われるわ
全文がないので推測だけど

Qid=a1 id=a2 id=a3 のようなid="a"+i のlengthを求めたい

id=a1 id=a2 id=a3 のようなid='a'+i のlengthを求めたい
のですが、どのようにするのでしょうか?

Aベストアンサー

たとえばこんな感じでどうでしょう?

<script>
window.onload=function(){
var tags=document.getElementsByTagName("*");
var count=0;
for(var i=0;i<tags.length;i++){
if(tags[i].id.match(/^a[0-9]+$/)) count++;
}
alert(count);
}
</script>

<div id="a1">a1</div>
<div id="a2">a2</div>
<div id="a3">a3</div>
<div id="a100">a100</div>
<div id="b1">b1</div>
<div id="b2">b2</div>
<div>none</div>

QFirefox/2 カーソルが砂時計のまま while(line=str.shift()){

<html>
<head>
<script type="text/javascript">
function init(){
var str="a:b:c".split(/:/);
var line;
while(line=str.shift()){
document.write(line + "<BR>");
}
}
</script>
</head>
<body onload="init()">
</body>
</html>

上記をFirefox/2(Win XP)で実行すると、カーソルが砂時計のまま戻りません。(IE6では再現視せず)

回避策ありましたら教えてください。

Aベストアンサー

document.close();

で閉じてみてください。


人気Q&Aランキング

おすすめ情報