13.4. mask, date, creditCard, emailルール
「mask」「date」「creditCard」「email」ルールは、いずれも入力文字列が特定の規則にしたがっているかどうか検証するルールです。
maskルールは、指定した正規表現にマッチしているかどうかを検証します。正規表現の指定は、「mask」変数で行います。正規表現には、awkおよびperlで用いられているものと、同等のものが使用可能です。
<field property="name" depends="mask"> <msg name="mask" key="name.invalidate" /> <var> <var-name>mask</var-name> <var-value>^[0-9]+$</var-value> </var> </field>
validatorでは正規表現の処理に、Jakarta OROライブラリを使用しています。maskルールを実行するには、Strutsに含まれているOROライブラリ(jakarta-oro.jar)が必要ですので注意してください。
dateルールは、日付を表すフォーマットに合致しているかどうか検証を行います。デフォルトでは、java.text.DateFormat.SHORTで用いられるフォーマット(日本では、「yy/MM/dd」)に合致しているかどうか検証します。もしフォーマットを変えたい場合には、「datePattern」変数を定義します。
<field property="birthday" depends="date"> <msg name="date" key="birthday.invalidate" /> <var> <var-name>datePattern</var-name> <var-value>yyyy-MM-dd</var-value> </var> </field>
creditCardルールは文字列がクレジットカード番号を表すものかどうか、emailルールはメールアドレスを表すものかどうか検証します。creditCardルールは桁数があっているかどうか、プレフィックスが正しいかどうか、パリティチェックを行いますが、該当するクレジットカード番号が使えるかどうかまでは検証できません。emailはW3Cの規約にあったメールアドレスかどうか検証します。ただし世の中には規約に従っていないメールアドレスもありますので、使用には注意が必要です。
<field property="ccnumber" depends="creditCard"> <msg name="creditCard" key="ccnumber.invalidate" /> </field>
これらのルールについてもintegerルール等と同じく空文字列に対して検証は行われません。required, requiredifルールと組み合わせて使用する場合には、required, requiredifルールを先に記述するようにしてください。required, requiredifルールが動作しなくなります。
(実習課題3)
実習課題2のWebアプリケーションと同じものを、maskルールを用いて作成しなさい。
(実習課題4)
以下のWebアプリケーションを作成しなさい。
- クレジットカード番号を入力させ、それが正しい番号かどうか確認する。
- 番号の入力フォームは、4桁ごとに区切った4つのテキストフォームからなる。
- 入力値の検証には、creditCardルールを使用すること。
- また各入力フォームには、4桁以上入力させないようにも制限をかけること。
- (ヒント)有効なクレジット番号と無効なクレジット番号の例は以下の通り。
- 有効なクレジットカード番号:4408 0412 3456 7893
- 無効なクレジットカード番号:4408 0412 3456 7890
ヒントで利用しているクレジット番号は、commons-validator の CreditCardValidator のJavadoc で紹介されているサイトを参考にしております。