フォーム中の半角カナに警告を返すには?

[上に] [前に] [次に]
和歌子 1999/04/23(金) 04:34:21
とほほさんのwwwメール送信プログラムを活用させていただき2ヶ月がたちました。
私はマックユーザーなので馴染みがないのですが、
メールを送っていただくかたの多くはウィンドウズユーザーの方のようで
ご記入いただいた箇所に半角かなが大変多く見受けられ、一部化けていたりしまして困っています。
「化けて読めないから、半角カタカナなどは使わないでね(^^)」とうたってはいるのですが。
もしもフォーム内に半角かながあったときに送信ボタンを押すと、
上記のようなお知らせをブラウザ画面に表示して、戻るボタンをつけるには
とほほさまプログラムのなかにどういう記述をするのが適切なのかについて
ご教授していただくことはできませんでしょうか?
素人てき質問および甘えた考えかもしれませんが、
せっかくメールをくださった方の内容が確認せねばわからず本当に困っています。
どうかお知恵をお貸しください。

ポケ鬼!! 1999/04/23(金) 10:19:32
JavaScriptでチェックを行い、半角カナが含まれていないときだけ送信できるようにする方法が有効です。
ただし、JavaScript非対応の環境ではメールできなくなりますが。

以下、サンプル(長い・・・)
-------------------------------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML LANG="ja">
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=Shift_JIS">
<META HTTP-EQUIV="Content-Script-type" CONTENT="text/javascript">
<TITLE>テストのページ</TITLE>
</HEAD>
<SCRIPT TYPE="text/javascript" DEFER>
<!--
//
// 半角カタカナが含まれていないなら、true
//
function KanaCheck(str)
{
var i;
var moji;
var len;

len = StrLen(str);

if (navigator.appName == "Microsoft Internet Explorer") {
for (i = 0; i < len; i++) {
moji = GetCharAt(str, i);
if (moji >= "。" && moji <= "゚") {
return (false);
}
}
} else {
for (i = 0; i < len; i++) {
moji = GetCharAt(str, i);
if (moji >= "。" && moji <= "゚") {
return (false);
}
}
}
return (true);
}

// 指定1文字取得(SJIS)
//
function GetCharAt(str, pos)
{
var i;
var len;
var moji;
var emoji;
var xmoji;

if (navigator.appName == "Microsoft Internet Explorer") {
return (str.charAt(pos));
} else {
len = 0;
for (i = 0; i < str.length; i++) {
moji = str.charAt(i);
emoji = escape(moji);
xmoji = eval("0x" + emoji.charAt(1));
if ((xmoji == 8) || (xmoji == 9) || (xmoji == 14) || (xmoji == 15)) {
moji = moji + str.charAt(i + 1);
i++;
}
if (pos == len) {
break;
}
len++;
}
return (moji);
}
}

//
// 文字列長を返す
// (全角文字も1文字としてカウント)
//
function StrLen(str)
{
var i;
var len;
var moji;
var xmoji;

if (navigator.appName == "Microsoft Internet Explorer") {
return (str.length);
} else {
len = 0;
for (i = 0; i < str.length; i++) {
moji = escape(str.charAt(i));
xmoji = eval("0x" + moji.charAt(1));
if ((xmoji == 8) || (xmoji == 9) || (xmoji == 14) || (xmoji == 15)) {
i++;
}
len++;
}
return (len);
}
}

//
// 半角チェック
//
function check(obj)
{
if (!KanaCheck(obj.MSG.value)) {
alert("半角カナは使えません。");
return (false);
} else {
obj.submit();
}
}
// -->
</SCRIPT>
<BODY>
<FORM ACTION="xxx.cgi">
<P><INPUT TYPE="TEXT" VALUE="(何か書いて)" NAME="MSG"></P>
<P><INPUT TYPE="BUTTON" VALUE="検証" onClick="check(this.form);"></P>
</FORM>
</BODY>
</HTML>


匿名希望 1999/04/23(金) 23:54:21
上記のように入り口で弾いてしまうという方法の他に、内部で変換してしまうという手もあります。

$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg;
if($FORM{$name} eq "")
の2行の間に私は
&jcode'h2z_sjis(*value);  #全角化
という関数を入れています。
環境によっては
&jcode'h2z_euc(*value);
かも知れませんが、それはそちらで試してみて下さい。
これなら JavaScript非対応の環境でも大丈夫です。

[上に] [前に] [次に]