2012年12月23日日曜日

InputFilterとValidator

ValidatorじゃなくてAndroidには InputFilterがあるじゃないか?って話がでたので...

フィルタとは (filter): - IT用語辞典バイナリ
フィルターは、受け取ったデータに対して何らかの処理や加工を行った上で出力すること

Androidでは以下のInputFilterが提供されています。
InputFilter | Android Developers

public interface

InputFilter (view source)

android.text.InputFilter
Known Indirect Subclasses
DateKeyListenerFor entering dates in a text field. 
DateTimeKeyListenerFor entering dates and times in the same text field. 
DialerKeyListenerFor dialing-only text entry
As for all implementations of KeyListener, this class is only concerned with hardware keyboards. 
DigitsKeyListenerFor digits-only text entry
As for all implementations of KeyListener, this class is only concerned with hardware keyboards. 
InputFilter.AllCapsThis filter will capitalize all the lower case letters that are added through edits. 
InputFilter.LengthFilterThis filter will constrain edits not to make the length of the text greater than the specified length. 
LoginFilterAbstract class for filtering login-related text (user names and passwords)  
LoginFilter.PasswordFilterGMailThis filter is compatible with GMail passwords which restricts characters to the Latin-1 (ISO8859-1) char set. 
LoginFilter.UsernameFilterGMailThis filter rejects characters in the user name that are not compatible with GMail account creation. 
LoginFilter.UsernameFilterGenericThis filter rejects characters in the user name that are not compatible with Google login. 
NumberKeyListenerFor numeric text entry
As for all implementations of KeyListener, this class is only concerned with hardware keyboards. 
TimeKeyListenerFor entering times in a text field. 


これら以外のフィルターを行いたい場合はカスタムフィルタを作成する必要があります。
作成の方法はこちらが参考になると思います。
EditTextにカスタムInputFilterを適用して入力値の制限を行う | MoaiApps Labo 
Y.A.M の 雑記帳: Android Filterを使ってみた

フィルタは、特定の文字列以外は認めない機能です。
入力された文字列を検査する機能では有りません。
それがバリデータになります。

バリデータとは 「バリデーター」 (validator): - IT用語辞典バイナリ
入力されたデータが仕様にそって適切に記述されているかを判断し、不適切な箇所があった場合にはエラーとして通知する。


特定の文字以外を入力させなくしているから、バリデータは不要でしょうか?

そんなことは無いと思います。
  • ユーザーID/パスワードなどの必須項目は入力されているか? 
  • パスワードはある桁以上であるか?特定の文字列を含んでいるか?
  • パスワードの確認入力などの二つの項目が同じであるか?
  • 電話番号や郵便番号などの"-"区切りのフォーマットが正しいか?
など、入力確定後に検査をしなければならないと思います。
※フォーマット付き項目については、項目を分けたらとか、フォーマット無しで入力させたらいいじゃないかとかありますけどね。鶴様が既存PCのフォームがフォーマット付きだから踏襲し...(ry

検査のタイミングですが、
  • フォーカスが外れたタイミング
  • ボタン押下などアクションのタイミング
となると思います。
※必須項目の検査は、全ての入力項目を確定させたアクションでしか行えないと思います。

AndroidのEditViewの場合、

  1. android:inputType 入力制御 (IMEのパネルを制御)
  2. InputFilter 入力制御 入力されたタイミングでフィルタ
  3. Formatter 文字列入力後にフォーマット
  4. Validator 最終的な文字列の検査

の順に処理をすればいいんじゃないかと思います。

バリデータなんて古いぜこっちの方がクールだぜ。ってのあったら教えてほしいな〜。

でわでわ

0 件のコメント:

コメントを投稿