値バリデータ

変数に有効なメールアドレスなどが含まれているかを迅速かつ簡単に検証する必要がありますか?その場合、値の検証に役立つ関数を持つ静的クラス Nette\Utils\Validators が便利です。

インストール:

composer require nette/utils

すべての例は、エイリアスが作成されていることを前提としています:

use Nette\Utils\Validators;

基本的な使用法

このクラスには、UnicodeかどうかEメールかどうかURLかどうか など、コードで使用するための値をチェックする多くのメソッドがあります:

if (!Validators::isEmail($email)) {
	throw new InvalidArgumentException;
}

さらに、値がいわゆる 期待される型 であるかどうかを検証できます。これは、個々のオプションがパイプ | で区切られた文字列です。これにより、is() を使用して複数の型を簡単に検証できます:

if (!Validators::is($val, 'int|string|bool')) {
	// ...
}

しかし、これはまた、期待値を文字列として記述する必要があるシステム(例えば、アノテーションや設定ファイル内)を作成し、それに基づいて値を検証する可能性も与えてくれます。

期待される型に対して assert() 要求を適用することもできます。これが満たされない場合、例外がスローされます。

期待される型

期待される型は、PHPで型を記述する方法と同様に、パイプ | で区切られた1つ以上のバリアントで構成される文字列です(例: 'int|string|bool')。null許容表記 ?int も受け入れられます。

すべての要素が特定の型である配列は、int[] の形式で記述されます。

一部の型の後には、コロンと長さ :length または範囲 :[min]..[max] が続くことがあります。例: string:10(長さ10バイトの文字列)、float:10..(10以上の数値)、array:..10(10要素以下の配列)、list:10..20(10〜20要素のリスト)、または pattern:[0-9]+ の正規表現。

型とルールの概要:

PHP 型
array 要素数の範囲を指定できます
bool  
float 値の範囲を指定できます
int 値の範囲を指定できます
null  
object  
resource  
scalar int|float|bool|string
string バイト単位の長さの範囲を指定できます
callable  
iterable  
mixed  
疑似型
list インデックス付き配列、要素数の範囲を指定できます
none 空の値: ''nullfalse
number int|float
numeric テキスト表現を含む数値
numericint テキスト表現を含む整数
unicode UTF-8文字列、文字単位の長さの範囲を指定できます
文字クラス (空文字列であってはなりません)
alnum すべての文字が英数字
alpha すべての文字がアルファベット [A-Za-z]
digit すべての文字が数字
lower すべての文字が小文字 [a-z]
space すべての文字が空白文字
upper すべての文字が大文字 [A-Z]
xdigit すべての文字が16進数 [0-9A-Fa-f]
構文検証
pattern 文字列全体に一致する必要がある正規表現
email Eメール
identifier PHP識別子
url URL
uri URI
環境検証
class 存在するクラス
interface 存在するインターフェース
directory 存在するディレクトリ
file 存在するファイル

アサーション

assert ($value, string $expected, string $label='variable')void

値がパイプで区切られた 期待される型 のいずれかであることを検証します。そうでない場合、Nette\Utils\AssertionException 例外をスローします。例外メッセージ内の単語 variable は、パラメータ $label で別の単語に置き換えることができます。

Validators::assert('Nette', 'string:5'); // OK
Validators::assert('Lorem ipsum dolor sit', 'string:78');
// AssertionException: The variable expects to be string:78, string 'Lorem ipsum dolor sit' given.

assertField (array $array, string|int $key, ?string $expected=null, ?string $label=null)void

配列 $array 内のキー $key の下の要素が、パイプで区切られた 期待される型 のいずれかであることを検証します。そうでない場合、Nette\Utils\AssertionException 例外をスローします。例外メッセージ内の文字列 item '%' in array は、パラメータ $label で別の文字列に置き換えることができます。

$arr = ['foo' => 'Nette'];

Validators::assertField($arr, 'foo', 'string:5'); // OK
Validators::assertField($arr, 'bar', 'string:15');
// AssertionException: Missing item 'bar' in array.
Validators::assertField($arr, 'foo', 'int');
// AssertionException: The item 'foo' in array expects to be int, string 'Nette' given.

バリデータ

is ($value, string $expected)bool

値がパイプで区切られた 期待される型 のいずれかであるかどうかを検証します。

Validators::is(1, 'int|float');  // true
Validators::is(23, 'int:0..10'); // false
Validators::is('Nette Framework', 'string:15');     // true、長さは15バイトです
Validators::is('Nette Framework', 'string:8..');    // true
Validators::is('Nette Framework', 'string:30..40'); // false

isEmail (mixed $value): bool

値が有効なメールアドレスであるかどうかを検証します。ドメインが実際に存在するかどうかは検証されず、構文のみが検証されます。この関数は、Unicodeである可能性のある将来の TLD も考慮します。

Validators::isEmail('example@nette.org'); // true
Validators::isEmail('example@localhost'); // false
Validators::isEmail('nette');             // false

isInRange (mixed $value, array $range)bool

値が指定された範囲 [min, max] 内にあるかどうかを検証します。上限または下限は省略できます(null)。数値、文字列、DateTimeオブジェクトを比較できます。

両方の境界が欠落している場合([null, null])または値が null の場合、false を返します。

Validators::isInRange(5, [0, 5]);     // true
Validators::isInRange(23, [null, 5]); // false
Validators::isInRange(23, [5]);       // true
Validators::isInRange(1, [5]);        // false

isNone (mixed $value): bool

値が 0''false、または null であるかどうかを検証します。

Validators::isNone(0); // true
Validators::isNone(''); // true
Validators::isNone(false); // true
Validators::isNone(null); // true
Validators::isNone('nette'); // false

isNumeric (mixed $value)bool

値が数値または文字列で記述された数値であるかどうかを検証します。

Validators::isNumeric(23);      // true
Validators::isNumeric(1.78);    // true
Validators::isNumeric('+42');   // true
Validators::isNumeric('3.14');  // true
Validators::isNumeric('nette'); // false
Validators::isNumeric('1e6');   // false

isNumericInt (mixed $value)bool

値が整数または文字列で記述された整数であるかどうかを検証します。

Validators::isNumericInt(23);      // true
Validators::isNumericInt(1.78);    // false
Validators::isNumericInt('+42');   // true
Validators::isNumericInt('3.14');  // false
Validators::isNumericInt('nette'); // false

isPhpIdentifier (string $value)bool

値がPHPで構文的に有効な識別子(クラス名、メソッド名、関数名など)であるかどうかを検証します。

Validators::isPhpIdentifier('');        // false
Validators::isPhpIdentifier('Hello1');  // true
Validators::isPhpIdentifier('1Hello');  // false
Validators::isPhpIdentifier('one two'); // false

isBuiltinType (string $type)bool

$type がPHPの組み込み型かどうかを調べます。そうでない場合は、クラス名です。

Validators::isBuiltinType('string'); // true
Validators::isBuiltinType('Foo');    // false

isTypeDeclaration (string $type)bool

指定された型宣言が構文的に有効かどうかをチェックします。

Validators::isTypeDeclaration('?string');      // true
Validators::isTypeDeclaration('string|null');  // true
Validators::isTypeDeclaration('Foo&Bar');      // true
Validators::isTypeDeclaration('(A&C)|null');   // true

Validators::isTypeDeclaration('?string|null'); // false
Validators::isTypeDeclaration('|foo');         // false
Validators::isTypeDeclaration('(A|B)');        // false

isClassKeyword (string $type)bool

$type が内部型 selfparentstatic のいずれかであるかどうかを調べます。

Validators::isClassKeyword('self'); // true
Validators::isClassKeyword('Foo');  // false

isUnicode (mixed $value)bool

値が有効なUTF-8文字列であるかどうかを検証します。

Validators::isUnicode('nette'); // true
Validators::isUnicode('');      // true
Validators::isUnicode("\xA0");  // false

isUrl (mixed $value): bool

値が有効なURLアドレスであるかどうかを検証します。

Validators::isUrl('https://nette.org:8080/path?query#fragment'); // true
Validators::isUrl('http://localhost');            // true
Validators::isUrl('http://192.168.1.1');          // true
Validators::isUrl('http://[::1]');                // true
Validators::isUrl('http://user:pass@nette.org');  // false
Validators::isUrl('nette.org');                   // false

isUri (string $value): bool

値が有効なURIアドレス、つまり構文的に有効なスキームで始まる文字列であるかどうかを検証します。

Validators::isUri('https://nette.org');           // true
Validators::isUri('mailto:gandalf@example.org');  // true
Validators::isUri('nette.org');                   // false
バージョン: 4.0