3.4. f:validateRegex
f:validateRegex タグは正規表現により入力値を定義します。HTML としては何も出力されませんが、他の HTML 系タグと組み合わせることでバリデーション (入力チェック) 機能として出力されます。
h:message または h:messages と組み合わせることでバリデーション結果を画面に出力することが可能となります。
sample3_4.xhtml
<h:body>
<h:form id="sample">
<h:commandButton type="submit" value="Check"/><br/>
入力項目:
<h:inputText id="checkText" label="入力項目">
<f:validateRegex pattern="[A-Z]\d{3,5}"/>
</h:inputText><br/>
<h:message for="checkText"/>
</h:form>
</h:body>
画面
![赤び~の備忘録-20100719_16_JSF16](https://stat.ameba.jp/user_images/20100719/16/kurabeat/28/1d/p/t02200162_0549040510647491886.png?caw=800)
HTML
<body>(*) 一部改行を追加しています。
<form id="sample" name="sample" method="post"
action="/glassfish/faces/sample/sample3_4.xhtml"
enctype="application/x-www-form-urlencoded">
<input type="hidden" name="sample" value="sample" />
<input type="submit" name="sample:j_idt7" value="Check" /><br/>
入力項目:
<input id="sample:checkText" type="text" name="sample:checkText" /><br />
<input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="-8318726776424984964:1388163035168003767" autocomplete="off" />
</form>
</body>
初期表示状態では特に HTML は表示されません。
f:validateRegex は pattarn 属性に指定した正規表現にもとづき入力文字が制限されます。
指定可能な正規表現は java.util.regex.Pattern に準拠しているようです。
h:message と入力項目は for 属性に id 属性を指定することで紐付けます。
sample3-4.xhtml では「先頭文字が英字大文字 + 3桁以上 5桁未満の数字」と定義していますので、その範囲内の少数値をテキストボックスに入力後 Check ボタンを選択しても画面に変化はありません。
正常時の画面
![赤び~の備忘録-20100719_17_JSF17](https://stat.ameba.jp/user_images/20100719/16/kurabeat/1c/66/p/t02200162_0549040510647491885.png?caw=800)
ですが、指定した正規表現に一致しない文字列を入力した場合は h:message の場所にエラーメッセージが表示されます。
エラー時の画面
![赤び~の備忘録-20100719_18_JSF18](https://stat.ameba.jp/user_images/20100719/16/kurabeat/5f/b0/p/t02200162_0549040510647491887.png?caw=800)
![赤び~の備忘録-20100719_19_JSF19](https://stat.ameba.jp/user_images/20100719/16/kurabeat/3b/b7/p/t02200162_0549040510647491889.png?caw=800)
(*) エラーメッセージが英語のままとなっています。日本語化の方法は調査中です。
エラー時のHTML
<body>(*) 一部改行を追加しています。
<form id="sample" name="sample" method="post"
action="/glassfish/faces/sample/sample3_4.xhtml"
enctype="application/x-www-form-urlencoded">
<input type="hidden" name="sample" value="sample" />
<input type="submit" name="sample:j_idt7" value="Check" /><br />
入力項目:
<input id="sample:checkText" type="text" name="sample:checkText" value="a1234" /><br/>
Regex pattern of '[A-Z]\d{3,5}' not matched
<input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="-8318726776424984964:5470059355040937594" autocomplete="off" />
</form>
</body>
理由は不明ですが、f:validateRegex では label 属性で指定した項目名を表示するためのメッセージ定義はされていないようです。