[Tep-j-develop] Re: 半角英数字が必要な入力フィールドの処理

Back to archive index

Tsukasa Sakaguchi t-sak****@brain*****
2002年 12月 13日 (金) 16:05:56 JST


さかぐち@brainheartsです。
こんにちは。

From: Mineaki Gotoh <gij****@peak*****>
Date: Fri, 13 Dec 2002 14:05:10 +0900
Subject: [Tep-j-develop] Re: 半角英数字が必要な入力フィールドの処理

>> 》という関数の、3番目の引数に、'style="ime-mode:disabled"' を与えます。
>> 詳細なわかりやすい解説、ありがとうございます。さっそく試してみました。
>> IMEが自動的に無効になると、スムースに入力ができて、とても使いやすくなり
>> ました。初心者が登録を迷わないようにするという意味では、この方法は非常に
>> 有効ですね。
>
>そうですね。最初から半角でしか入力できないのですから、迷いようがない
>と思います。

その逆に、たとえば、姓名や住所など、日本人なら全角で入力するような場所には
'style="ime-mode: active"'と書いておくと、自動的にONになるので、より便利かと。
# disabled は絶対にONにできない
# inactive はOFFになるけれど、ONにすることができる
# という違いがありますね

>> なお、Netscape6.1とOpera6でもやってみましたが、両ブラウザは上記CSS非対応
>> のようでした。
>
>確認ありがとうございます。私もOpera6で試してみましたが、確かにこの
>CSSは無視されているようでした。

Netscape7.1も無視ですね。
そもそもIME自体がWindows独自のものなので、こればかりは仕方ないと思っています。
# WindowsでATOKを使っている人は、どうなんでしょう?
# 制御できているのでしょうか。気になるところです。


入力項目のチェックという点では、javascriptが動作するという前提で、チェックする
ことも可能ですが、ちょっと面倒くさいです。

とりあえず、郵便番号、電話番号、E-mailアドレスのチェックだけですが、
IEで動作するチェック用のjavascriptはこんな感じになります。
#もっと 簡単な方法があるのかもしれませんが
--
var NUMSTR = new String('0123456789');
var ALPSTR = new String('abcdefghijklmnopqrstuvwxyz'
                      + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ');
var EXPZIP = new RegExp('^[' + NUMSTR + ']{3}(\-?[' + NUMSTR + ']{2}([' + NUMSTR + ']{2})?)?$');
var EXPTEL = new RegExp('([' + NUMSTR + ']+\\-?)?([' + NUMSTR + ']+\\-?)?([' + NUMSTR + ']{4})$');
var EXPEMAIL = new RegExp('^[' + NUMSTR + ALPSTR + '][' + NUMSTR + ALPSTR + '_\\-\\.]*\@['
                  + NUMSTR + ALPSTR + '][' + NUMSTR + ALPSTR + '_\\-\\.]*\\.[' + ALPSTR + ']+$');
//  郵便番号判定
//  I: 文字列
//  O: true/false
//  3桁/5桁/7桁のいずれかであればOK
function IsZipCD(s) {
  if (s.length == 0) return true;
  var r = s.replace(EXPZIP, '');
  return (r.length == 0) ? true : false;
}
//  電話番号判定
//  I: 文字列
//  O: true/false
//  任意桁数の数字-任意桁数の数字-4桁の数字 であればOK
function IsTelNo(s) {
  if (s.length == 0) return true;
  var r = s.replace(EXPTEL, '');
  return (r.length == 0) ? true : false;
}
//  E-Mail判定
//  I: 文字列
//  O: true/false
//  @ の前に 半角英数字で始まり任意桁数の半角英数字および-_.
//  @ の後に 半角英数字で始まり任意桁数の半角英数字および-_.が続き .半角英字で終わる
function IsEmail(s) {
  if (s.length == 0) return true;
  var r = s.replace(EXPEMAIL, '');
  return (r.length == 0) ? true : false;
}
--
生年月日も同様にチェックできると思うのですが、実在する日付かどうか?など
もうちょっとチェックは細かくなるでしょうね。
# ちなみに、方法は若干異なりますが、全角/半角のチェックもできますし
# 入力された文字数ではなく、バイト数を調べることもできますね

>ただ、IE5およびOpera6で試した限りにおいては、maxlength は、全角でも半
>角でも1字という解釈なので、ここが問題になることはないでしょう。
>
>そんなわけで、修正はMySQL側だけで済むと思います。(ソースをいろいろい
>じると、後が大変ですし)

同じ郵便番号、たとえば 001-0001 と入力されたデータと
001−0001 あるいは 0010001 と入力されたデータが混在していると
後々、顧客データを郵便番号をつかって分布分析をしたいとか、そういうニーズが
出てきたときに面倒だと思いますが、その辺はどうお考えでしょうか?

データを管理するという点で見ると、ソースを修正して、一律001-0001あるいは
001−0001としてしまったほうがよいと思うのですが。

-- 
BrainHearts Corp.
Tsukasa Sakaguchi / t-sak****@brain*****
Tel. 045-290-7561



Tep-j-develop メーリングリストの案内
Back to archive index