テキストフィールド内にて、全角文字以外が入力されたらエラーをだすようにしています。そのとき以下のソースだと改行した時に、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と関連する良く見られている質問

QChr(13)とChr(10)の違いは?

myStr = Replace(myStr, Chr(13), "")

myStr = Replace(myStr, Chr(10), "")

で、改行を置換しているのですが、どちらかでも改行できる時や
どちらかじゃないと改行できない時があります。

そもそもChr(13)とChr(10)の違いはなんでしょう?
どちらも改行ですよね?
何が違うのでしょう?

Aベストアンサー

こんにちは。お邪魔します。

Chr(10) ・・・ ラインフィード ・・・ 略して、Lf

Chr(13) ・・・ キャリッジリターン ・・・ 略して、Cr

改行文字に何を使うのかはアプリケーションが規定するものです。

Win・Office環境では
上のふたつを組合わせた改行[CrLf]を使うことが多いと思います。
次に[Lf]、そして、[Cr]

なので、ソースによっては
  myStr = Replace(myStr, vbCrLf, "")
と、一発で置換できるケースも少なくないです。
■ソースごとに改行文字を確認しておくことから始めた方が有利になります。■

ひとまず、VBAでの改行の扱いに慣れるには
■VBAで用意された文字列定数について知っておいた方がよいと思います。■
 VBE(Visual Basicの編集画面)が開いている状態で、
 F2 キー → オブジェクトブラウザー起動
 検索小窓に、vbCrLf、とタイプして、検索ボタン
 VBA.Constantsクラスのメンバーが表示され
 その中にすべての改行文字(文字列定数)が含まれています。
 そのまま、F1 キーでヘルプを表示します。
詳しい説明はヘルプを読む方がいいでしょう。

実践的な話として、
Chr(10)やChr(13)は関数の戻り値です。
対して、
vbLfやvbCr(またはvbCrLf)は定数です。
定数で済ませられるなら、定数の方が何かと有利です。
定数の名前は略号ですから、実態をイメージし易くなっています。
定数の扱いに慣れることをお奨めします。
例)
  myStr = Replace(myStr, vbLf, "")
  myStr = Replace(myStr, vbCr, "")
  myStr = Replace(myStr, vbCrLf, "")

もしも文字列定数を先に覚えていたなら、疑問にもならなかったのかも知れませんね。
私の場合は、改行の何たるかを覚える前に文字列定数覚えていて、困ることありませんでしたから。

以上、ご参考まで。

こんにちは。お邪魔します。

Chr(10) ・・・ ラインフィード ・・・ 略して、Lf

Chr(13) ・・・ キャリッジリターン ・・・ 略して、Cr

改行文字に何を使うのかはアプリケーションが規定するものです。

Win・Office環境では
上のふたつを組合わせた改行[CrLf]を使うことが多いと思います。
次に[Lf]、そして、[Cr]

なので、ソースによっては
  myStr = Replace(myStr, vbCrLf, "")
と、一発で置換できるケースも少なくないです。
■ソースごとに改行文字を確認しておくことから始めた方が有利...続きを読む

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エクセルVBAのChr(10)の挿入と削除

宜しくおねがいします


現在結合されたセルがありそのセル内に他のプログラムから
下記の値が挿入されるようになっています。

あいうえお
かきくけこ
さしすせそ
たちつてと
(Chr(10)の改行)
(Chr(10)の改行)
(Chr(10)の改行)
(Chr(10)の改行)


他のプログラムから送られてくる値は”あ行”の1行だけだったり
”ま行”までの7行あったりとその都度変わってきます。
文字数も”あ”の1文字だけだったり”あああいいいうううえええおおお”と
文字数も変わります。

しかし下の4行分の”Chr(10)の改行”の数は変わりません。


やりたいことは↓

コマンドボタンを二つ作り、ボタンを押すたびに下にあるChr(10)の改行を
挿入したり削除したりしたいのですがどのようにすればよいのでしょうか?
追加ボタンを2回押すとChr(10)の改行が6行分になり
そこから削除ボタンを3回押すとChr(10)の改行が3行分になる・・・という感じです。


試しにマクロの記録で

セルを選択して改行を削除

をしてみたのですが思うような動きをしてくれません。

なぜChr(10)なのかとかいうのは聞かないでください・・・
そこから説明すると長くなるので。

宜しくおねがいします


現在結合されたセルがありそのセル内に他のプログラムから
下記の値が挿入されるようになっています。

あいうえお
かきくけこ
さしすせそ
たちつてと
(Chr(10)の改行)
(Chr(10)の改行)
(Chr(10)の改行)
(Chr(10)の改行)


他のプログラムから送られてくる値は”あ行”の1行だけだったり
”ま行”までの7行あったりとその都度変わってきます。
文字数も”あ”の1文字だけだったり”あああいいいうううえええおおお”と
文字数も変わります。

しかし下の4行分の”Chr(10)の改行”の数は変わ...続きを読む

Aベストアンサー

Sub CommandButton1_click()
 activecell.value = activecell.value & vbLf
End Sub

Sub CommandButton2_click()
 dim buf as string
 buf = activecell.value
 If right(buf, 1) = vbLf then
 activecell.value = left(buf, len(buf) - 1)
 end if
End Sub

単純に足したり削ったりするだけのようですが。

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(){}();
と同じです
つまり関数を定義してすぐ呼んでいるだけです

QVB、chr関数を一覧で印刷できる?

Chr(10)が改行だとかは、どこでどうやって探すの?
一覧表みたいに印刷できる?

Aベストアンサー

MSDNで ASCII文字セット を調べればわかりますよ。
ちなみに、8、9、10、13 は制御文字で、それぞれBackSpace、TAB、LF、CR ですね。

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 は文章の最後を意味している
と思われるわ
全文がないので推測だけど

QChr関数のラインフィールド文字って?

EXCEL2000のVBAを勉強しているものです。
Chr関数のラインフィールド文字ってどんなことが
できるのでしょうか?調べると「復帰」とかかれているのですが・・
実際に使ってみても何がどう変わっているのかがわかりません。
chr(10)
とすると、どうなるのでしょうか?教えてください。
よろしくお願いいたします。

Aベストアンサー

こんにちは。maruru01です。

文字コード10のラインフィードは、Excelではセル内改行になります。
セルの書式設定の[配置]で、[折り返して全体を表示する]にチェックをしておいて、
そのセルに、

Range("A1").Value = "1行目" & Chr(10) & "2行目"

と書き込むと、セル内改行されます。
ちなみにVBの定数を使用して、

Range("A1").Value = "1行目" & vbLf & "2行目"

とも出来ます。

なお、通常のWindows改行は、Chr(13) & Chr(10)で、VBの定数は、「vbCrLf」ですが、これを使用して、

Range("A1").Value = "1行目" & vbCrLf & "2行目"

とすると、セルの表示は、

1行目・
2行目

という風に、Chr(13)が表示出来ずに、中黒になってしまいます。

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>

QChr関数であいうえお順に

Chr関数であいうえお順に文字をエクセルに書き出そうとしたけど、
単純にはいかないのですかね?

Sub test()
Dim MyRow As Long
Dim i As Long

For MyRow = 1 To 51
Cells(MyRow, 1) = Chr(-32096 + i)
i = i + 2
Next MyRow

End Sub
これを実行すると、濁点が入ったりするのですが、
綺麗に「あ~ん」まで取得する方法はありますか?

複雑なコードを作るしかないのですかね?

Aベストアンサー

Chr(-32096 + i)



Mid("あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをん", i, 1)

あたりに変えればできませんかね?
文字列部分は別途変数に入れて分離しても可です。

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ランキング