アプリ版:「スタンプのみでお礼する」機能のリリースについて

テキストフィールド内にて、全角文字以外が入力されたらエラーをだすようにしています。そのとき以下のソースだと改行した時に、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("全角文字のみ");
}

}

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

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が見つからない時は、教えて!gooで質問しましょう!