- PR -

文字コードでの判定

投稿者投稿内容
しょむ
ぬし
会議室デビュー日: 2001/09/06
投稿数: 430
投稿日時: 2002-10-22 23:43
なんだか二重投稿になってしまっていたようなので、ついでに。

ASCII (U+0020〜(U+007E) あたりならコードでのチェックもできそうですが、
ひらがなだのカタカナだのそのへんを考えると、
"0123456789.-+".indexOf() とかで真面目に当てていくほうが安全な気もしますね。
スピードは稼げないですが。
# 1.4.x なら regexp でがんばるという荒技も?:b

[ メッセージ編集済み 編集者: しょむ 編集日時 2002-10-23 00:56 ]
たららん!
会議室デビュー日: 2001/11/25
投稿数: 10
投稿日時: 2002-10-28 23:02
みなさん、ありがとうございます。
返信遅くなり申しわけございません。

ユーザが入力した値をチェックするのはJavaよりJavaScriptの方が
どうも簡単なようですね。

で、確実性があるのは"0123・・・・".indexOf()なのかもしれませんね。
もちろん漏れなく記入するというのが前提でしょうが。。。

みなさんは、携帯電話での入力値チェックはどうしているのでしょうかね?
しょむ
ぬし
会議室デビュー日: 2001/09/06
投稿数: 430
投稿日時: 2002-10-29 03:22
Web の入力フォームの入力チェックは
- サーバ側でチェック
- クライアント側(JavaScriptなど)でのチェックはユーザの利便性の補助程度
というのが鉄則です。
クライアント側でのチェックなぞ信用して腐れデータを DB につっこまれたらたまりません。ユーザから送られてきたデータの正当性/整合性はいついかなるときでも疑うべきです。

厳密に「この文字とこの文字は OK」と決まっているならば、真面目にやるべきでしょうね。また、それは要求仕様として明確にしておくべきです。

コード範囲での判定は微妙かなぁ。コード範囲でひとからげにしてしまうと、どうしても考慮漏れが起こってくる可能性が…。

「数字」といわれたときに、カンマがどうとか、符号がどうとか、「整数に 11.0 はだめなのか」とか、いわゆる全角数字系はどうなんだとか。
「フリガナ」とか言われたときに、いわゆる半角カナはどうなんだとか、句読点、補助記号などはどうだとかいうことまで明確にし、また、それを store する形式(生格納なのか正規化するのか)、検索時の同一視条件などなども絡めて決定しておかねばなりません。
氏名や住所などにしても同様で、ちゃんと最初に考えておかないと、いざ動かしだしてから「あー、検索にひっかからねぇ」なんてことになります。電話番号、郵便番号もね。

こういうのを考えてると、結局 OK になる文字やパターンを列挙してしまう方が楽だったりします。

# あと、蛇足ですが、日本語文字コードの自動判定なんてものを信用して
# DB がぐちゃぐちゃになったりもしますので。


[ メッセージ編集済み 編集者: しょむ 編集日時 2002-10-29 03:37 ]
takasaki
常連さん
会議室デビュー日: 2002/02/14
投稿数: 31
投稿日時: 2002-10-30 13:33
こんにちは

わたしは一度Unicodeに変換した文字列inputを
正規表現のチェックで数値かどうか判別してます。
ただPatternはJDK1.4から導入されていますが・・・。

Pattern pattern = Pattern.compile("[^0-9]", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(input);
return !matcher.find();

小数点ありなら、"[^0-9.]"としてます。
あ、数値チェックの場合マッチフラグはいらないですね。

スキルアップ/キャリアアップ(JOB@IT)