スニペット"eForm":フィールドの検証(エラーチェック)する内容を設定

フィールドの検証(エラーチェック)する内容を設定するには、各フィールドにeform属性を付与します。

構文

<input ... eform="項目名:種類:必須:メッセージ:詳細検証内容">

<select ... eform="項目名:種類:必須:メッセージ:詳細検証内容">...</select>

<textarea ... eform="項目名:種類:必須:メッセージ:詳細検証内容"></textarea>
説明
項目名
必須
フィールドの項目名称。
エラーメッセージが表示された際にどの項目のエラーかを表示するためのもの。
種類
必須
フィールドの値がどんな種類か。
種類に一致しない値だった場合はエラーとなる。
指定可能な値は次の通り。
指定なし(空) ... なんでも
string ... 文字列
integer ... 整数
float ... 浮動小数点
date ... 日時形式
email ... メールアドレス形式
file ... 添付ファイル
html ... HTML
必須
必須
フィールドの入力・選択を必須にするかどうか。
処理内容としては値が空かどうかを判定する。
指定可能な値は次の通り。
0 ... 任意  1 ... 必須
メッセージ "詳細検証内容"でエラーとなった場合に表示するテキスト。
詳細検証内容 必須以外の検証内容。
詳しくは 詳細検証内容の指定方法 を参照。

チェックボックスなど1つのフィールド名で複数存在する場合は、最初のフィールドのみにeform属性を指定します。

サンプルコード

[!eForm?
	...
	&tpl=`@CODE:
		...

		<dl>
			<dt><label for="field-name">お名前</label></dt>
			<dd>
				<input name="name" value="" maxlength="10" id="field-name" eform="お名前:string:1">
			</dd>
			<dt>性別</dt>
			<dd>
				<input type="radio" name="sex" value="男性" id="field-sex-male" eform="性別::1"><label for="field-sex-male">男性</label>
				<input type="radio" name="sex" value="女性" id="field-sex-woman"><label for="field-sex-woman">女性</label>
			</dd>
			<dt><label for="field-email">メールアドレス</label></dt>
			<dd>
				<input name="email" value="" id="field-email" eform="メールアドレス:email:1">
			</dd>
			<dt>当Webサイトを知ったきっかけ</dt>
			<dd>
				<input type="checkbox" name="know[]" value="チラシ" id="field-know-flyer" eform="当Webサイトを知ったきっかけ::1"><label for="field-know-flyer">チラシ</label>
				<input type="checkbox" name="know[]" value="検索エンジン" id="field-know-search"><label for="field-know-search">検索エンジン</label>
				<input type="checkbox" name="know[]" value="SNS (Social Network Service)" id="field-know-sns"><label for="field-know-sns">SNS (Social Network Service)</label>
				<input type="checkbox" name="know[]" value="その他" id="field-know-other"><label for="field-know-other">その他</label>
			</dd>
			<dt><label for="field-contents">お問い合わせ内容</label></dt>
			<dd>
				<textarea name="contents" id="field-contents" eform="コメント:html:1"></textarea>
			</dd>
		</dl>
	...`
	...
!]

詳細検証内容の指定方法

"詳細検証内容"の指定方法は次の通りです。

構文

<... eform="...:...:...:...:種類 内容">
説明
種類 検証する種類。
指定可能な値は次の通り。
#REGEX ... 正規表現
#LIST ... リスト内の一致
#RANGE ... 数字の範囲
#SELECT ... SQLのSELECTのクエリ
#FUNCTION ... 関数
内容 検証する内容。
種類によって指定の仕方が異なる。

種類ごとの検証内容の指定方法

#REGEX

正規表現に一致するかを検証するには、#REGEXを使用します。
PHPのpreg_match関数の第一引数と同じ指定の仕方をします。

例:

eform="電話番号::0:電話番号の形式で入力してください。:#REGEX /^[0-9]{8,}|[0-9]{1,}-[0-9]{1,}-[0-9]{1,}$/"

#LIST

フィールドの値がリストのいずれかに一致するかを検証するには、#LISTを使用します。
カンマ区切りで指定します。

例:

eform="色::0:赤、青、黄、緑、白、黒のいずれかを選択してください。:#LIST 赤,青,黄,緑,白,黒"

#RANGE

フィールドの値が数字の範囲内かを検証するには、#RANGEを使用します。
カンマで区切ることで複数の条件を指定することができます。

例(範囲):

eform="個数::0:1~10の範囲で指定してください。:#RANGE 1-10"

例(単一):

eform="個数::0:3のみ指定してください。:#RANGE 3"

例(複数):

eform="個数::0:1、または3、または10~13の範囲で指定してください。:#RANGE 1,3,10-13"

例(負):

eform="個数::0:-10~+20の範囲で指定してください。:#RANGE -10-20"

#SELECT

データベースのSQL文のSELECTからクエリを使用して検証するには、#SELECTを使用します。
クエリによって取得する結果は1つの列(カラム)のみを返す必要があります。

なお、{DBASE}でデータベース名を、{PREFIX}でテーブルのプレフィックスを指定することでそれぞれ自動で割り当ててくれます。

例:

eform="キーワード::0:存在しないキーワードです。:#SELECT keyword FROM {PREFIX}site_keywords"

#FUNCTION

フィールドの値がリストのいずれかに一致するかを検証するには、#FUNCTIONを使用します。
内容には予め用意した関数の関数名を指定します。
関数はいくつか用意する方法がありますが、スニペットが最も分かりやすい方法かと思います。

スニペット:eFormFunctions

function myValidate($value) {
	return $value == 'あいうえお';
}
return '';

スニペット名、関数名はなんでもかまいません。
関数の第一引数がフィールドの値が渡ってきます。
関数のreturnbooleanで返し、合格した場合はtrue、不合格の場合(エラーとする)はfalseを返すようにします。
スニペットのreturnは何も出力しないよう空の文字列を返すようにします。
なお、1つのスニペットで複数の関数を定義することも可能です。

次のように用意したスニペットを実行して、#FUNCTIONの値に実行したい関数名を指定します。

例:

[[eFormFunctions]]
[!eForm?
	...
	&tpl=`@CODE:
		...
		... eform="その他::0:一致しませんでした。:#FUNCTION myValidate" ...
		...
	`
	...
!]

CMS「MODX Evolution」逆引きリファレンス一覧へ戻る