4.1.4 組み込みのバリデーションルール(Validation Rules)

The original text for this section has changed since it was translated. Please help resolve this difference. You can:

More information about translations

CakePHP のバリデーション(Validation)クラスには、あらかじめ組み込まれたルールがたくさんあり、これらを用いるとバリデーションがとても簡単になります。このクラスには、あらたに定義を書き起こさなくていいように、よく使われるバリデーションのテクニックがふんだんに盛り込まれています。全てのルールの説明と使用例の一覧は、下記を参照してください。

4.1.4.1 alphaNumeric

半角のアルファベットか数字のみ許可されます。

var $validate = array(
    'login' => array(
        'rule' => 'alphaNumeric',
        'message' => 'ユーザ名は半角英数字のみ使用できます。'
    )
);
  1. var $validate = array(
  2. 'login' => array(
  3. 'rule' => 'alphaNumeric',
  4. 'message' => 'ユーザ名は半角英数字のみ使用できます。'
  5. )
  6. );

4.1.4.2 between

The original text for this section has changed since it was translated. Please help resolve this difference. You can:

More information about translations

データの長さが整数で指定された範囲におさまっていることを確認します。最小値と最大値は必須です。「<」ではなく「<=」が使用されます。

var $validate = array(
    'password' => array(
        'rule' => array('between', 5, 15),
        'message' => 'Passwords must be between 5 and 15 characters long.'
    )
);
  1. var $validate = array(
  2. 'password' => array(
  3. 'rule' => array('between', 5, 15),
  4. 'message' => 'Passwords must be between 5 and 15 characters long.'
  5. )
  6. );

4.1.4.3 blank

このルールは、データが空かホワイトスペースのみで構成されているかどうかを確認するために使われます。ホワイトスペースは、半角スペースとタブ、復帰文字(carriage return)および改行文字(newline)を含みます。

var $validate = array(
    'id' => array(
        'rule' => 'blank',
        'on' => 'create'
    )
);
  1. var $validate = array(
  2. 'id' => array(
  3. 'rule' => 'blank',
  4. 'on' => 'create'
  5. )
  6. );

4.1.4.4 boolean

このセクションには保留されている変更があります. More information about translations

The data for the field must be a boolean value. Valid values are true or false, integers 0 or 1 or strings '0' or '1'.

var $validate = array(
    'myCheckbox' => array(
        'rule' => array('boolean'),
        'message' => 'Incorrect value for myCheckbox'
    )
);
  1. var $validate = array(
  2. 'myCheckbox' => array(
  3. 'rule' => array('boolean'),
  4. 'message' => 'Incorrect value for myCheckbox'
  5. )
  6. );

4.1.4.5 cc

The original text for this section has changed since it was translated. Please help resolve this difference. You can:

More information about translations

このルールはデータがクレジットカードの番号として適切かどうかをチェックする時に使います。パラメータは「type」「deep」「regex」の3つです。

「type」キーには「fast」「all」あるいは次のいずれかを値として割り当てることができます。

  • bankcard
  • diners
  • disc
  • electron
  • enroute
  • jcb
  • maestro
  • mc
  • solo
  • switch
  • visa
  • voyager

「type」を「fast」にセットすると、主要なクレジットカード番号の型でチェックします。「all」にセットすると、全てのクレジットカード番号のタイプでチェックします。マッチさせたいクレジットカードのタイプを配列にして、それを「type」にセットすることもできます。

「deep」キーにはブール値(boolean)をセットします。 true にセットした場合、バリデーションはクレジットカードのルーン・アルゴリズム(Luhn algorithm, http://en.wikipedia.org/wiki/Luhn_algorithm)を用いてチェックします。この項目のデフォルトは false です。

「regex」キーにはクレジットカード番号であるかを検証するための、独自の正規表現を設定します。

var $validate = array(
    'ccnumber' => array(
        'rule' => array('cc', array('visa', 'maestro'), false, null),
        'message' => 'あなたが入力したデータは、クレジットカードの番号ではありません。'
    )
);
  1. var $validate = array(
  2. 'ccnumber' => array(
  3. 'rule' => array('cc', array('visa', 'maestro'), false, null),
  4. 'message' => 'あなたが入力したデータは、クレジットカードの番号ではありません。'
  5. )
  6. );

4.1.4.6 comparison

「comparison」は数字を比較する時に使います。「is greater (~より大きい)」「is less (~より小さい)」「greater or equal (~以上)」「less or equal (~以下)」「equal to (~と等しい)」「not equal (~と等しくない)」というものをサポートしています。 いくつか例を次に示します。

var $validate = array(
    'age' => array(
        'rule' => array('comparison', '>=', 18),
        'message' => '18歳以上の方のみ対象です。'
    )
);

var $validate = array(
    'age' => array(
        'rule' => array('comparison', 'greater or equal', 18),
        'message' => '18歳以上の方のみ対象です。'
    )
);
  1. var $validate = array(
  2. 'age' => array(
  3. 'rule' => array('comparison', '>=', 18),
  4. 'message' => '18歳以上の方のみ対象です。'
  5. )
  6. );
  7. var $validate = array(
  8. 'age' => array(
  9. 'rule' => array('comparison', 'greater or equal', 18),
  10. 'message' => '18歳以上の方のみ対象です。'
  11. )
  12. );

4.1.4.7 date

このルールは、送信されたデータが日付として有効なフォーマットであるかどうかを確認します。フォーマットの確認に使うためのパラメータを一つ持たせることができます。(パラメタは配列にすることもできます。) パラメータの値として、次のものが指定できます。

  • ‘dmy’ 例:「27-12-2006」または「27-12-06」(セパレータには、スペース、ピリオド、ダッシュ、スラッシュを使用できます)
  • ‘mdy’ 例:「12-27-2006」または「12-27-06」(セパレータには、スペース、ピリオド、ダッシュ、スラッシュを使用できます)
  • ‘ymd’ 例:「2006-12-27」または「06-12-27」(セパレータには、スペース、ピリオド、ダッシュ、スラッシュを使用できます)
  • ‘dMy’ 例:「27 December 2006」または「27 Dec 2006」
  • ‘Mdy’ 例:「December 27, 2006」または「Dec 27, 2006」(カンマはオプションです)
  • ‘My’ 例:「December 2006」または「Dec 2006」
  • ‘my’ 例:「12/2006」または「12/06」(セパレータには、スペース、ピリオド、ダッシュ、スラッシュを使用できます)

デフォルトのパラメータは「ymd」です。

var $validate = array(
    'born' => array(
        'rule' => 'date',
        'message' => '正しいデータを「YY-MM-DD」のフォーマットで入力してください。',
        'allowEmpty' => true
    )
);
  1. var $validate = array(
  2. 'born' => array(
  3. 'rule' => 'date',
  4. 'message' => '正しいデータを「YY-MM-DD」のフォーマットで入力してください。',
  5. 'allowEmpty' => true
  6. )
  7. );

大抵のデータ・ストアは、特定の日付の書式を必要とします。しかし、指定の書式に従った入力をユーザに強要するのではなく、労を惜しまずにさまざまな形式のデータを受け付けて変換するというやりかたを考えるかもしれません。ユーザのためにできることは、やったほうが好ましいでしょう。

4.1.4.8 decimal

このルールは、データが小数かどうかを確認します。パラメータは、小数点以下の桁数(位)のみ与えられます。もしパラメータを何も与えなかったら、データが浮動小数点であってもバリデーションは成功します。ただしこの時、小数点以下に数字が無いとバリデーションは失敗します。

var $validate = array(
    'price' => array(
        'rule' => array('decimal', 2)
    )
);
  1. var $validate = array(
  2. 'price' => array(
  3. 'rule' => array('decimal', 2)
  4. )
  5. );

4.1.4.9 email

このルールは、データが電子メールのアドレスとして適切な文字列かどうかを判定します。第一引数にブール値で true を設定すると、このルールはメールサーバーのホストが存在するかどうかを確認しようとします。

var $validate = array('email' => array('rule' => 'email'));
 
var $validate = array(
    'email' => array(
        'rule' => array('email', true),
        'message' => 'メールアドレスを正しく入力してください。'
    )
);
  1. var $validate = array('email' => array('rule' => 'email'));
  2. var $validate = array(
  3. 'email' => array(
  4. 'rule' => array('email', true),
  5. 'message' => 'メールアドレスを正しく入力してください。'
  6. )
  7. );

4.1.4.10 equalTo

このルールは、データと第一引数が、値と型の両方で同じかどうかを確認します。

var $validate = array(
    'food' => array(
        'rule' => array('equalTo', 'cake'),  
        'message' => 'この項目は文字列で「cake」としなければなりません。'
    )
);
  1. var $validate = array(
  2. 'food' => array(
  3. 'rule' => array('equalTo', 'cake'),
  4. 'message' => 'この項目は文字列で「cake」としなければなりません。'
  5. )
  6. );

4.1.4.11 extension

The original text for this section has changed since it was translated. Please help resolve this difference. You can:

More information about translations

このルールはデータとして与えられたファイル名の拡張子(「.jpg」や「.png」など)が、指定したものにマッチするか確認します。複数の拡張子をマッチさせる場合は、配列で指定します。

var $validate = array(
    'image' => array(
        'rule' => array('extension', array('gif', 'jpeg', 'png', 'jpg'),
        'message' => '適切な画像ファイル名を入力してください。'
    )
);
  1. var $validate = array(
  2. 'image' => array(
  3. 'rule' => array('extension', array('gif', 'jpeg', 'png', 'jpg'),
  4. 'message' => '適切な画像ファイル名を入力してください。'
  5. )
  6. );

4.1.4.12 file

このセクションには保留されている変更があります. More information about translations

This rule ensures that the value is a valid file name. This validation rule is currently non-functional.

4.1.4.13 ip

このルールはデータがIPv4の形式であるかどうかを確認します。

var $validate = array(
    'clientip' => array(
        'rule' => 'ip',
        'message' => 'IPアドレスを正しく入力してください。'
    )
);
  1. var $validate = array(
  2. 'clientip' => array(
  3. 'rule' => 'ip',
  4. 'message' => 'IPアドレスを正しく入力してください。'
  5. )
  6. );

4.1.4.14 isUnique

与えられた値が他の行で出現せず、ユニークであるかどうかを確認します。

var $validate = array(
    'login' => array(
        'rule' => 'isUnique',
        'message' => 'このユーザ名はすでに使用されています。'
    )
);
  1. var $validate = array(
  2. 'login' => array(
  3. 'rule' => 'isUnique',
  4. 'message' => 'このユーザ名はすでに使用されています。'
  5. )
  6. );

4.1.4.15 minLength

The original text for this section has changed since it was translated. Please help resolve this difference. You can:

More information about translations

このルールはデータの長さが指定したものより小さくならないようにします。

var $validate = array(
    'login' => array(
        'rule' => array('minLength', '8'),  
        'message' => 'ユーザ名は8文字以上にしてください。'
    )
);
  1. var $validate = array(
  2. 'login' => array(
  3. 'rule' => array('minLength', '8'),
  4. 'message' => 'ユーザ名は8文字以上にしてください。'
  5. )
  6. );

4.1.4.16 maxLength

The original text for this section has changed since it was translated. Please help resolve this difference. You can:

More information about translations

このルールはデータの長さが指定したものより大きくならないようにします。

var $validate = array(
    'login' => array(
        'rule' => array('maxLength', '15'),  
        'message' => 'ユーザ名は15文字以下にしてください。'
    )
);
  1. var $validate = array(
  2. 'login' => array(
  3. 'rule' => array('maxLength', '15'),
  4. 'message' => 'ユーザ名は15文字以下にしてください。'
  5. )
  6. );

4.1.4.17 money

このルールは、値が金額として有効なものであるかを確認します。

二番目のパラメータは通貨記号の位置(右か左)を定義します。

var $validate = array(
    'salary' => array(
        'rule' => array('money', 'left'),
        'message' => '金額として有効なものを入力してください。'
    )
);
  1. var $validate = array(
  2. 'salary' => array(
  3. 'rule' => array('money', 'left'),
  4. 'message' => '金額として有効なものを入力してください。'
  5. )
  6. );

4.1.4.18 Multiple

The original text for this section has changed since it was translated. Please help resolve this difference. You can:

More information about translations

これは、複数選択する入力のバリデーションに使用します。パラメータとして「in」「max」そして「min」をサポートします。

var $validate = array(
    'multiple' => array(
        'rule' => array('multiple', array('in' => array('foo', 'bar'), 'min' => 1, 'max' => 3)),
        'message' => '1~3個の項目を選択してください'
    )
);
  1. var $validate = array(
  2. 'multiple' => array(
  3. 'rule' => array('multiple', array('in' => array('foo', 'bar'), 'min' => 1, 'max' => 3)),
  4. 'message' => '1~3個の項目を選択してください'
  5. )
  6. );

4.1.4.19 inList

このルールは、送信されたデータが、あらかじめ指定したリストの中に含まれているかを確認します。リストは必ず配列で指定してください。その配列の値のどれかが一致した場合、バリデーションは成功します。

例:
	var $validate = array(
	  'function' => array(
	  	'allowedChoice' => array(
	  		'rule' => array('inList', array('Foo', 'Bar')),
	  		'message' => '「Foo」か「Bar」を入力してください。'
	  	)
	  )
	);
  1. var $validate = array(
  2. 'function' => array(
  3. 'allowedChoice' => array(
  4. 'rule' => array('inList', array('Foo', 'Bar')),
  5. 'message' => '「Foo」か「Bar」を入力してください。'
  6. )
  7. )
  8. );

4.1.4.20 numeric

データが数字もしくは数値形式であるかどうかをチェックします。

var $validate = array(
    'cars' => array(
        'rule' => 'numeric',  
        'message' => '車の番号を入力してください。'
    )
);
  1. var $validate = array(
  2. 'cars' => array(
  3. 'rule' => 'numeric',
  4. 'message' => '車の番号を入力してください。'
  5. )
  6. );

4.1.4.21 notEmpty

フィールドが空で無いかどうかを確認する基本的なルールです。

var $validate = array(
    'title' => array( 
        'rule' => 'notEmpty',
        'message' => 'このフィールドは必ず入力してください。'
    )
);
  1. var $validate = array(
  2. 'title' => array(
  3. 'rule' => 'notEmpty',
  4. 'message' => 'このフィールドは必ず入力してください。'
  5. )
  6. );

このルールを複数選択のinputで使うとエラーになります。代わりに、「multiple」ルールを使ってください。

4.1.4.22 phone

アメリカの電話番号の形式であるかを確認します。もしアメリカ以外の電話番号形式を検証したいのなら、それに適する正規表現を第二パラメータに指定してください。

var $validate = array(
    'phone' => array(
        'rule' => array('phone', null, 'us')
    )
);
  1. var $validate = array(
  2. 'phone' => array(
  3. 'rule' => array('phone', null, 'us')
  4. )
  5. );

4.1.4.23 postal

郵便番号かどうかを確認します。対応している国は、アメリカ(us)、カナダ(ca)、イギリス(uk)、イタリア(it)、ドイツ(de)、ベルギー(be)です。その他の国の郵便番号を確認したい場合、それに適する正規表現を第二引数で定義してください。

var $validate = array(
    'zipcode' => array(
        'rule' => array('postal', null, 'us')
    )
);
  1. var $validate = array(
  2. 'zipcode' => array(
  3. 'rule' => array('postal', null, 'us')
  4. )
  5. );

4.1.4.24 range

The original text for this section has changed since it was translated. Please help resolve this difference. You can:

More information about translations

このルールは、指定した範囲にデータがおさまるかどうかを確認します。もし範囲を指定しなかった場合は、プログラムが実行されているプラットフォーム上で有限な数値かどうかを判定します。

var $validate = array(
    'number' => array(
        'rule' => array('range', 0, 10),
        'message' => '0より大きく10より小さい数を入力してください。'
    )
);
  1. var $validate = array(
  2. 'number' => array(
  3. 'rule' => array('range', 0, 10),
  4. 'message' => '0より大きく10より小さい数を入力してください。'
  5. )
  6. );

この例では、0より大きく (たとえば 0.01) 10より小さい (たとえば9.99) 値が許されます。

4.1.4.25 ssn

データが社会保障番号であるかを確認します。対応している国は、アメリカ(us)、デンマーク(dk)、オランダ(dk)です。その他の国の社会保障番号を確認したい場合、それに適する正規表現を第二引数で定義してください。

var $validate = array(
    'ssn' => array(
        'rule' => array('ssn', null, 'us')
    )
);
  1. var $validate = array(
  2. 'ssn' => array(
  3. 'rule' => array('ssn', null, 'us')
  4. )
  5. );

4.1.4.26 url

正しいURLの形式であるかどうかを確認します。http(s)、ftp(s)、file、news、gopher のプロトコルに対応しています。

var $validate = array(
    'website' => array(
        'rule' => 'url'
    )
);
  1. var $validate = array(
  2. 'website' => array(
  3. 'rule' => 'url'
  4. )
  5. );

URLがプロトコル名から始まっていることを確認するためには、次のように厳密モードを有効にしてください。

var $validate = array(
    'website' => array(
        'rule' => array('url', true)
    )
);
  1. var $validate = array(
  2. 'website' => array(
  3. 'rule' => array('url', true)
  4. )
  5. );