バリデーターjs
validatorjs ライブラリを使用すると、ブラウザと Node.js の両方で JavaScript でのデータ検証が非常に簡単になります。このライブラリは、Laravel フレームワークの Validatorからインスピレーションを受けています。
なぜ validatorjs を使用するのでしょうか?
- ライブラリに依存しません。
- ブラウザとノードの両方で動作します。
- 読みやすい宣言型の検証ルール。
- 多言語サポートによるエラー メッセージ。
- AMD/Require.js および CommonJS/Browserify のサポート。
インストール
Bower、NPM、または Github の /dist ディレクトリから validatorjs を取得します。
1bower install validatorjs
1npm install validatorjs
Browser
1<script src="validator.js"></script>
Node.js / Browserify
1let Validator = require('validatorjs');
Basic Usage
1let validation = new Validator(data, rules [, customErrorMessages]);
data {Object} - 検証するデータ
rules {Object} - 検証ルール
CustomErrorMessages {Object} - 返されるオプションのカスタム エラー メッセージ
例 1 - 検証に合格する
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16let data = {
name: 'John',
email: 'johndoe@gmail.com',
age: 28
};
let rules = {
name: 'required',
email: 'required|email',
age: 'min:18'
};
let validation = new Validator(data, rules);
validation.passes(); // true
validation.fails(); // false
検証ルールをデータオブジェクトに適用するには、ルールオブジェクトに同じオブジェクト キー名を使用します。
例 2 - 検証の失敗
1
2
3
4
5
6
7
8
9
10
11
12
13
14let validation = new Validator({
name: 'D',
email: 'not an email address.com'
}, {
name: 'size:3',
email: 'required|email'
});
validation.fails(); // true
validation.passes(); // false
// Error messages
validation.errors.first('email'); // 'The email format is invalid.'
validation.errors.get('email'); // returns an array of all email error messages
Nested Rules
ネストされたオブジェクトも検証できます。ネストされたオブジェクトの検証ルールを宣言するには 2 つの方法があります。1 つ目の方法は、データを反映する対応するネストされたオブジェクト構造を使用して検証ルールを宣言することです。2 つ目の方法は、フラット化されたキーを使用して検証ルールを宣言することですたとえば、次のデータを検証するには:
1
2
3
4
5
6
7
8
9
10let data = {
name: 'John',
bio: {
age: 28,
education: {
primary: 'Elementary School',
secondary: 'Secondary School'
}
}
};
検証ルールを次のように宣言できます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19let nested = {
name: 'required',
bio: {
age: 'min:18',
education: {
primary: 'string',
secondary: 'string'
}
}
};
// OR
let flattened = {
'name': 'required',
'bio.age': 'min:18'
'bio.education.primary': 'string',
'bio.education.secondary': 'string'
};
WildCards Rules
ワイルドカードも検証できます。
1
2
3
4
5
6
7
8
9
10
11
12let data = {
users: [{
name: 'John',
bio: {
age: 28,
education: {
primary: 'Elementary School',
secondary: 'Secondary School'
}
}
}]
};
検証ルールを次のように宣言できます。
1
2
3
4
5
6let rules = {
'users.*.name': 'required',
'users.*.bio.age': 'min:18'
'users.*.bio.education.primary': 'string',
'users.*.bio.education.secondary': 'string'
};
Available Rules
検証ルールには暗黙の「必須」がありません。フィールドが未定義または空の文字列の場合、検証に合格します。未定義または '' の検証を失敗させたい場合は、必須ルールを使用してください。
受け入れられました
検証中のフィールドは、yes、on、1、または true である必要があります。これは、「利用規約」への同意を検証するのに役立ちます。
後:日付
検証対象のフィールドは、指定された日付以降である必要があります。
after_or_equal:日付
検証前のフィールドは、指定されたフィールド以降である必要があります。
アルファ
検証対象のフィールドは完全に英字である必要があります。
アルファダッシュ
検証中のフィールドには、英数字のほか、ダッシュやアンダースコアも使用できます。
alpha_num
検証対象のフィールドは完全に英数字である必要があります。
配列
検証対象のフィールドは配列である必要があります。
前:日付
検証中のフィールドは、指定された日付より前のものである必要があります。
before_or_equal:日付
検証対象のフィールドは、指定された日付以前である必要があります。
間:最小、最大
検証されるフィールドのサイズは、指定された最小値と最大値の間である必要があります。文字列、数値、およびファイルは、サイズ ルールと同じ方法で評価されます。
ブール値
検証対象のフィールドはtrue
、false
、0
、1
、 、'true'
、'false'
、'0'
、'1'
、の形式のブール値である必要があります。
確認済み
検証中のフィールドには foo_confirmation の一致するフィールドが必要です。たとえば、検証中のフィールドがパスワードの場合、一致するpassword_confirmation フィールドが入力に存在する必要があります。
日付
検証対象のフィールドは、JavaScript のDate
オブジェクトで受け入れられる有効な日付形式である必要があります。
桁: 値
検証対象のフィールドは数値である必要があり、値の長さが正確である必要があります。
異なる:属性
指定されたフィールドは、検証中のフィールドとは異なる必要があります。
Eメール
検証中のフィールドは電子メール アドレスとしてフォーマットされている必要があります。
16進数
検証中のフィールドは 16 進形式である必要があります。16hex|size:6
進カラー コード検証など、他のルールと組み合わせると便利です。
in:foo、bar、...
検証中のフィールドは、指定された値のリストに含まれている必要があります。フィールドには配列または文字列を使用できます。
整数
検証対象のフィールドには整数値が必要です。
最大:値
属性が指定されたサイズ以下であることを検証する
注: 最大チェック数が含まれます。
最小:値
属性が少なくとも指定されたサイズであることを検証します。
注: 最小限のチェックが含まれます。
not_in:foo、bar、...
検証中のフィールドは、指定された値のリストに含めてはなりません。
数値
属性が数値であることを検証します。数値の文字列表現は合格します。
必須
値の文字列表現の長さが > であるかどうかを確認します。
required_if:別のフィールド、値
検証中のフィールドは存在する必要があり、anotherfield フィールドが任意の値と等しい場合は空であってはなりません。
required_unless:別のフィールド、値
検証対象のフィールドは存在する必要があり、anotherfield フィールドがいずれかの値に等しい場合を除き、空であってはなりません。
required_with:foo、bar、...
検証対象のフィールドは存在する必要があり、他の指定されたフィールドが存在する場合にのみ空であってはなりません。
required_with_all:foo、bar、...
検証対象のフィールドは存在する必要があり、他の指定されたフィールドがすべて存在する場合にのみ空であってはなりません。
required_without:foo、bar、...
検証対象のフィールドは存在する必要があり、他の指定されたフィールドが存在しない場合にのみ空であってはなりません。
required_without_all:foo、bar、...
検証対象のフィールドは存在する必要があり、他の指定されたフィールドがすべて存在しない場合にのみ空であってはなりません。
同じ:属性
指定されたフィールドは検証中のフィールドと一致する必要があります。
サイズ:値
検証対象のフィールドのサイズは、指定された値と一致する必要があります。文字列データの場合、値は文字数に対応します。数値データの場合、値は指定された整数値に対応します。
弦
検証対象のフィールドは文字列である必要があります。
URL
属性が有効な URL 形式であることを検証する
正規表現:パターン
検証中のフィールドは、指定された正規表現と一致する必要があります。
注: パターンを使用する場合regex
、特に正規表現にパイプ文字が含まれている場合は、パイプ区切り文字を使用する代わりに配列内でルールを指定する必要がある場合があります。正規表現パターンで使用したバックスラッシュごとに、それぞれをエスケープする必要があります。別のバックスラッシュを付けます。
例 3 - 正規表現の検証
1
2
3
4
5
6
7
8
9
10
11
12let validation = new Validator({
name: 'Doe',
salary: '10,000.00',
yearOfBirth: '1980'
}, {
name: 'required|size:3',
salary: ['required', 'regex:/^(?!0\\.00)\\d{1,3}(,\\d{3})*(\\.\\d\\d)?$/'],
yearOfBirth: ['required', 'regex:/^(19|20)[\\d]{2,2}$/']
});
validation.fails(); // false
validation.passes(); // true
例 4 - 型チェックの検証
1
2
3
4
5
6
7
8
9
10let validation = new Validator({
age: 30,
name: ''
}, {
age: ['required', { 'in': [29, 30] }],
name: [{ required_if: ['age', 30] }]
});
validation.fails(); // true
validation.passes(); // false
Register Custom Validation Rules
1Validator.register(name, callbackFn, errorMessage);
name {String} - ルールの名前。
callbackFn {Function} - 検証の成功または失敗を表すブール値を返します。
errorMessage {String} - カスタム エラー メッセージを指定できるオプションの文字列。errorMessage内の:attribute は属性名に置き換えられます。
1
2
3Validator.register('telephone', function(value, requirement, attribute) { // requirement parameter defaults to null
return value.match(/^\d{3}-\d{3}-\d{4}$/);
}, 'The :attribute phone number is not in the format XXX-XXX-XXXX.');
Asynchronous Validation
コールバックを受け入れる非同期ルールを登録しますpasses
。
1
2
3
4
5
6Validator.registerAsync('username_available', function(username, attribute, req, passes) {
// do your database/api checks here etc
// then call the `passes` method where appropriate:
passes(); // if username is available
passes(false, 'Username has already been taken.'); // if username is not available
});
次に、バリデーターを呼び出してコールバックを渡すかfails
、passes
次のようにします。
1
2
3
4
5
6
7
8
9
10
11
12
13let validator = new Validator({
username: 'test123'
}, {
username: 'required|min:3|username_available'
});
validator.passes(function() {
// Validation passed
});
validator.fails(function() {
validator.errors.first('username');
});
passes
注: コールバックを使用せずに呼び出しを試行しfails
、バリデーターが非同期検証ルールがあることを検出した場合、例外がスローされます。
Error Messages
このコンストラクターは、失敗した検証ルールのエラー メッセージを自動的に生成します。
エラーがある場合、Validator インスタンスにはエラープロパティ オブジェクトがあり、失敗したすべての属性のエラー メッセージが設定されます。エラープロパティ オブジェクトのメソッドとプロパティは次のとおりです。
.first(属性)
属性の最初のエラー メッセージを返します。それ以外の場合は false を返します。
.get(属性)
属性のエラー メッセージの配列を返します。エラーがない場合は空の配列を返します。
。全て()
失敗したすべての属性のすべてのエラー メッセージを含むオブジェクトを返します。
.has(属性)
属性にエラーメッセージが存在する場合は true を返し、それ以外の場合は false を返します。
.errorCount
検証エラーの数
1
2
3let validation = new Validator(input, rules);
validation.errors.first('email'); // returns first error message for email attribute
validator.errors.get('email'); // returns an array of error messages for the email attribute
Custom Error Messages
特定のエラー メッセージが必要で、デフォルトのメッセージをオーバーライドしたくない場合は、Laravelの場合と同様に、Validator オブジェクトの 3 番目の引数としてオーバーライドを渡すことができます。
1
2
3
4
5
6
7
8
9
10let input = {
name: ''
};
let rules = {
name : 'required'
};
let validation = new Validator(input, rules, { required: 'You forgot to give a :attribute' });
validation.errors.first('name'); // returns 'You forgot to give a name'
一部のバリデーターには文字列バージョンと数値バージョンがあり、それらを変更することもできます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15let input = {
username: 'myusernameistoolong'
};
let rules = {
username : 'max:16'
};
let validation = new Validator(input, rules, {
max: {
string: 'The :attribute is too long. Max length is :max.'
}
});
validation.errors.first('username'); // returns 'The username is too long. Max length is 16.'
属性ごとにエラー メッセージを提供することもできます! メッセージのキーを「validator.attribute」に設定するだけです。
1
2
3
4
5
6
7
8
9let input = { name: '', email: '' };
let rules = { name : 'required', email : 'required' };
let validation = new Validator(input, rules, {
"required.email": "Without an :attribute we can't reach you!"
});
validation.errors.first('name'); // returns 'The name field is required.'
validation.errors.first('email'); // returns 'Without an email we can\'t reach you!'
Custom Attribute Names
エラー メッセージにカスタムの「わかりやすい」属性名を表示するには、次を使用します。.setAttributeNames()
1
2
3
4
5let validator = new Validator({ name: '' }, { name: 'required' });
validator.setAttributeNames({ name: 'custom_name' });
if (validator.fails()) {
validator.errors.first('name'); // "The custom_name field is required."
}
あるいは、プロパティを使用して lang でグローバル カスタム属性名を指定することもできますattributes
。
カスタム属性フォーマッタを構成することもできます。
1
2
3
4
5
6
7
8
9
10
11
12
13// Configure global formatter.
Validator.setAttributeFormatter(function(attribute) {
return attribute.replace(/_/g, ' ');
});
// Or configure formatter for particular instance.
let validator = new Validator({ first_name: '' }, { first_name: 'required' });
validator.setAttributeFormatter(function(attribute) {
return attribute.replace(/_/g, ' ');
});
if (validator.fails()) {
console.log(validator.errors.first('first_name')); // The first name field is required.
}
注: デフォルトでは、すべての _ 文字はスペースに置き換えられます。
Language Support
エラー メッセージはデフォルトでは英語で表示されます。ブラウザに別の言語を含めるには、スクリプト タグで言語ファイルを参照し、 を呼び出しますValidator.useLang('lang_code')
。
1
2
3
4
5<script src="dist/validator.js"></script>
<script src="dist/lang/ru.js"></script>
<script>
Validator.useLang('es');
</script>
Node では、言語ソース ファイルが自動的に取得されます。
1
2let Validator = require('validatorjs');
Validator.useLang('ru');
あなたの言語のサポートが表示されない場合は、サポートをsrc/lang
!に追加してください。
次を呼び出して、独自のカスタム言語を追加することもできますsetMessages
。
1
2
3Validator.setMessages('lang_code', {
required: 'The :attribute field is required.'
});
指定された言語のメッセージの生のオブジェクトを取得します。
1Validator.getMessages('lang_code');
バリデーターで使用されるデフォルトの言語を切り替えます。
1Validator.useLang('lang_code');
使用されているデフォルトの言語を取得します。
1Validator.getDefaultLang(); // returns e.g. 'en'
言語のデフォルトのメッセージをオーバーライドします。
1
2
3let messages = Validator.getMessages('en');
messages.required = 'Whoops, :attribute field is required.';
Validator.setMessages('en', messages);