非表示フィールドによるフォームデータの検証

ColdFusion で、名前に検証対象のフィールド名と検証タイプが設定された非表示フォームフィールドを使用することにより、サーバーでフォームフィールド検証を指定することができます。非表示フィールド検証は、ColdFusion フォームフィールドの onServer 検証と同じ基本技術およびアルゴリズムを使用します。

非表示フィールド検証には次の特徴があります。

非表示フォームフィールド検証の指定

非表示フィールド検証を指定するには、次の項目を実行します。

次の例は、非表示フィールドを使用して、データフィールドへのデータ入力を必須とし、フィールドに日付が設定されるようにします。この例は、HTML タグのみで構成されます。

<input type="text" name="StartDate" size="16" maxlength="16"><br>
<input type="hidden" name="StartDate_required" 
      value="開始日を入力してください。">
<input type="hidden" name="StartDate_date" 
   value="開始日を正しく入力してください。">

非表示フォームフィールド名の最後に次の接尾辞を使用して、検証タイプを指定します。タイプ識別子の最初には、常にアンダースコアが付けられます。一部の検証ルールには、2 つの名前を使用できます。以前のリリースでは、"_cf" で始まらない名前が使用されていました。後方互換性を維持するため、こうした名前を引き続き使用することができます。ただし、一貫性の維持と明確化のため、新しいフォームには "_cf" で始まる名前を使用することをお勧めします。

フィールド名の接尾辞 検証内容

_integer、_cfforminteger

範囲 -2,147,483,648 ~ 2,147,483,647 の整数。イニシャル文字 "$ € ¥ £ +" を有効な入力として処理しますが、数値からはこれらの文字を削除します。

_cfformnumeric

任意の数値。イニシャル文字 "$ € ¥ £ +" を有効な入力として処理します。ただし、数値からこれらの文字を削除しません。

_float、_cfformfloat

最大有効桁数 12 の浮動小数点数として表すことのできる任意の値 (整数を含む)。イニシャル文字 "$ € ¥ £ +" を有効な入力として扱いますが、数値からはこれらの文字を削除します。

入力データを実数に変換します。たとえば、アクションページにおける整数値のダンプには、小数点とその後に続く 0 が含まれます。

_range、_cfformrange

value 属性によって指定された範囲内の数値。"min=minvalue max=maxvalue" の書式を使って、value 属性で範囲を指定します。この検証に対してカスタムエラーメッセージを指定することはできません。

_date、_cfformdate

ColdFusion が認識可能な書式で記述される日付。入力を ODBC 日付書式に変換します。時刻部分のエントリを許可しますが、ODBC 値からは削除します。

_cfformusdate

m/d/y、m-d-y、または m.d.y. の形式の日付。m および d は 1 桁または 2 桁に、y は 2 桁または 4 桁に設定できます。文字列を ODBC 値に変換しないでください。さらに、時刻部分を許可しないでください。

_eurodate、_cfformeurodate

d/m/y、d-m-y、または d.m.y. の形式の日付。m および d は 1 桁または 2 桁に、y は 2 桁または 4 桁に設定できます。入力を ODBC 日付書式に変換します。時刻部分のエントリを許可しますが、ODBC 値からは削除します。

_time、_cfformtime

時刻。12 時間表記または 24 時間表記を指定できます。hh:mm:ss の形式で秒単位まで含めたり、大文字小文字を区別しない am または pm 表記を含めたりすることができます。

入力を ODBC 時刻形式に変換します。日付部分のエントリを許可しますが、ODBC 値からは削除されます。

_cfformcreditcard

空白とハイフンの後に、mod10 アルゴリズムに準拠する数値を指定します。番号は 13 ~ 16 桁指定する必要があります。

_cfformSSN、_cfformsocial_security_number

9 桁の社会保障番号。書式は xxxx-xx-xxxx または xxxx xx xxxx となります。

_cfformtelephone

標準の米国電話番号の書式。国際電話番号はサポートしていません。

括弧の有無にかかわらず地域コードの入力を許可します。さらに、標準の番号グループ間にハイフン (-)、スペース、ピリオドを設定したり、セパレータなしで設定したりすることができます。最初の 1 桁に長距離識別子、および最後に最大 5 桁の内線番号を設定できます。x で開始することもできます。地域コードと局番は、1 ~ 9 の数字で始まる必要があります。

_cfformzipcode

米国の 5 桁または 9 桁形式の郵便番号。9 桁の郵便番号では、最後の 4 桁の前にハイフン (-) かスペースを設定する必要があります。

_cfformemail

有効な電子メールアドレス。アドレスに使用できる有効文字は、a-zA-Z0-9_- とピリオド/セパレータです。1 つの記号 (@) を設定する必要があり、@ 文字の後にくるテキストにはピリオドが含まれている必要もあります。たとえば、my_address@MyCo.com または b-b.jones27@hisco.co.uk のように指定する必要があります。

_cfformURL

有効な URL。http://、https://、ftp://、file://、mailto:、または news: で始まる必要があります。必要に応じて、ユーザー名とパスワード識別子、およびクエリー文字列を指定できます。アドレスの主要部分には、A-Za-z0-9 と - だけを設定することができます。

_cfformboolean

ブール値として処理できる値 : Yes、No、True、False、0、1

_cfformUUID

ColdFusion の書式 xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx に準拠する UUID (Universally Unique Identifier)。x には 16 進数の数値が入ります。

_cfformGUID

Microsoft/DCE 形式に準拠する一意の識別子 (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)。x には、16 進数の数値が入ります。

_cfformnoblanks

このフィールドには空白を設定しないでください。_required 非表示フィールドも指定した場合にのみ、この検証が使用されます。

_cfformmaxlength

タグの value 属性で指定された数値を超える文字数を指定しないでください。

_cfformregex、_cfformregular_expression

データは、value 属性で指定された JavaScript 正規表現と照合する必要があります。

_required、_cfformrequired

フォームフィールドにデータを入力するか、フォームフィールドでデータを選択する必要があります。

非表示フォームフィールドに関する検討事項

非表示フォームフィールド検証を使用するかどうか、およびその使用方法を決定する際には、次のルールおよび推奨事項を検討する必要があります。

非表示フォームフィールドの例

次の手順によって、開始日および給与を入力する簡単なフォームを作成できます。非表示フィールドを使用して、常にデータが正しい形式で入力されるようにします。

この例は、自己送信フォームを使用します。つまり、フォームページとアクションページが同一の ColdFusion ページです。このページは IsDefined 関数を使って、フォームデータが送信済みであることをチェックします。このようにすれば、入力データを送信しないかぎり、ページにはどのような結果も表示されません。このフォームは HTML タグのみを使用します。これらのタグを、対応する CFML タグに置換することができます。

<html>
<head>
   <title>簡単なデータフォーム</title>
</head>
<body>
<h2>簡単なデータフォーム</h2>

<!--- フォームパート --->
<form action="datatest.cfm" method="Post">
   <input type="hidden"
      name="StartDate_cfformrequired" 
      value="開始日を入力してください。">
   <input type="hidden"
      name="StartDate_cfformdate" 
      value="開始日を正しく入力してください。">
   <input type="hidden"
      name="Salary_cfformrequired" 
      value="給与を入力してください。">
   <input type="hidden"
      name="Salary_cfformfloat" 
      value="給与は数値で入力してください。">
   開始日 : 
   <input type="text"
      name="StartDate" size="16"
      maxlength="16"><br>
   給与 : 
   <input type="text"
      name="Salary"
      size="10"
      maxlength="10"><br>
   <input type="Reset"
      name="ResetForm"
      value="フォームのクリア">
   <input type="submit"
      name="SubmitForm"
      value="データの挿入">
</form>
<br>

<!--- アクションパート --->
<cfif isdefined("Form.StartDate")>
   <cfoutput>
      開始日 :#DateFormat(Form.StartDate)#<br>
      給与 :#DollarFormat(Form.Salary)#
   </cfoutput>
</cfif>
</html>

このフォームが送信されると、ColdFusion はフォームフィールドを走査し、検証ルールを検索します。次にそのルールを使用して、ユーザーの入力を分析します。入力ルールに違反している場合、ColdFusion は、非表示フィールドの value 属性で指定されたエラーメッセージをエラーページに表示します。ユーザーは、フォームの画面に戻って問題を訂正し、フォームを再送信する必要があります。ColdFusion では、ユーザーが正しく入力するまでフォームの送信が受け付けられません。

数値には、カンマや通貨記号が含まれることが多いので、ColdFusion はフォームフィールドを検証してデータをフォームのアクションページに渡す前に、_cfforminteger および _cfformfloat ルールが設定されたフィールドからこれらの文字を自動的に削除します。ただし、_cfformnumeric ルールが設定されたフィールドから、これらの文字が削除されることはありません。

コードの確認

次の表で、前述のコードおよびその機能について説明します。

コード 説明
<form action="datatest.cfm"
   method="post">

このフォームから情報を収集し、Post メソッドを使用して情報を dataform.cfm ページ (このページ) に送信します。

<input type="hidden"
   name="StartDate_cfformrequired" 
   value="開始日を入力してください。">
<input type="hidden"
   name="StartDate_cfformdate" 
   value="開始日を正しく入力してください。">

"開始日" 入力フィールドへの入力を必須化します。入力がない場合は、"開始日を入力してください。" というエラーメッセージが表示されます。また、有効な日付形式での入力を必須化します。有効な形式で入力されていないと、"開始日を正しく入力してください。" というエラーメッセージが表示されます。

<input type="hidden"
   name="Salary_required"
   value="給与を入力してください。">
<input type="cfformhidden" 
   name="Salary_cfformfloat" 
   value="給与は数値で入力してください。">

"給与" 入力フィールドへの入力を必須化します。入力がない場合は、"給与を入力してください。" というエラーメッセージが表示されます。また、有効な数値での入力を必須化します。入力が有効な形式で入力されていないと、"給与は数値で入力してください。" というエラーメッセージが表示されます。

開始日 : 
<input type="text"
   name="StartDate" size="16"
   maxlength="16"><br>

ユーザーが開始日を入力する "開始日" というテキストボックスを作成します。テキストボックスの幅を 16 文字に設定します。

給与 : 
<input type="text"
   name="Salary"
   size="10"
   maxlength="10"><br>

ユーザーが給与を入力する "給与" というテキストボックスを作成します。テキストボックスの幅を 10 文字に設定します。

<cfif isdefined("Form.StartDate")>
   <cfoutput>
      開始日 :
#DateFormat(Form.StartDate)#<br> 給与 :
#DollarFormat(Form.Salary)# </cfoutput> </cfif>

"開始日" および "給与" フォームフィールドの数値を、それらが定義されている場合にのみ表示します。これらはフォームが送信されるまでは定義されないため、最初のフォームでは表示されません。開始日をデフォルトの日付形式で表示するには、DateFormat 関数を使用します。給与をドル記号とカンマを用いて表示するには、DollarFormat 関数を使用します。


ColdFusion MX 7 | ColdFusion MX 6.1 | ColdFusion MX* | ColdFusion 5* | フォーラム* | デベロッパーセンター | サポート情報 | バグ報告

バージョン7