Iodine.js は、マイクロ クライアント側検証ライブラリです。依存関係がなく、単独で使用することも、フレームワークの一部として使用することもできます。 Iodine は連鎖可能なルールもサポートしており、データの一部が複数の基準を満たしていることを検証できます。
Iodine のバージョン 8 以降では、多数の重大な変更を伴う大幅な書き換えが行われました。したがって、既存のプロジェクトでは引き続きバージョン 7 (またはそれ以下) を使用し、バージョン 8 (またはそれ以降) は新しいプロジェクト用に予約しておくことをお勧めします。
Iodine をプロジェクトに取り込む最も簡単な方法は、CDN を使用することです (必ずビルド番号を更新してください)。
< script src =" https://cdn.jsdelivr.net/npm/@caneara/[email protected]/dist/iodine.min.umd.js " defer > script >
NPM 経由で Iodine をプロジェクトに取り込むこともできます。
npm i @ caneara / iodine
Iodine はwindow
名前空間に自動的に追加され、どこでも使用できるようになります。これは、プロジェクトにコンパイルやインポートが含まれない場合に推奨される Iodine の使用方法です。プロジェクトにコンパイルが必要な場合でも、多くの場合、 window
名前空間に追加されたインスタンスを使用する方が簡単です。
あるいは、インポートの使用に慣れている場合、または独自のインスタンスを作成したい場合は、次のように Iodine をインポートできます。
import Iodine from '@caneara/iodine' ;
const instance = new Iodine ( ) ;
Iodine には、関連するメソッドを介してアクセスできる一連の検証ルールが含まれています。これにより、項目が整数なのか日付なのかなどを迅速かつ簡単に確認できるようになります。
Iodine のルールには、 assert
接頭辞が付きます。したがって、項目がinteger
かどうかを確認するには、次のコードを使用します。
let item_1 = 7 ;
let item_2 = 'string' ;
Iodine . assertInteger ( item_1 ) ; // true
Iodine . assertInteger ( item_2 ) ; // false
Iodine に含まれる検証ルールの完全なリストについては、以下を参照してください。
アイテムが個別の検証ルールに準拠しているかどうかを確認することは便利ですが、アイテムが複数のルールに準拠しているかどうかを確認したい場合もよくあります。たとえば、電子メール アドレスは必須である場合があり、文字列である必要があり、電子メール アドレスの正規表現を満たす必要があります。
こうしたニーズに応えるために、Iodine では「単一項目チェック」と「複数項目チェック」を提供しています。
このアプローチは、複数のルールに対してテストする必要がある項目が 1 つある場合 (上記の電子メール アドレスの例など) に推奨されます。 「単一項目チェック」を実行するには、メインのassert
メソッドを呼び出します。このメソッドは 2 つのパラメータを取ります。まずはチェック項目です。 2 番目は、順番に実行する必要がある検証ルールのarray
です。
let item_1 = 7 ;
let item_2 = 'string' ;
Iodine . assert ( item_1 , [ 'required' , 'integer' ] ) ;
Iodine . assert ( item_2 , [ 'required' , 'integer' ] ) ;
この例でわかるように、検証ルールはstrings
使用して表現されます。検証ルールのstring
表現を見つけるには、既存のリストを確認してください。
個々のアサーション ( boolean
返す) とは異なり、 assert
メソッドはレポートを含むobject
を返します。アイテムがすべてのルールに合格すると、次の結果が得られます。
{
valid : true ,
rule : '' ,
error : '' ,
} ;
アイテムの検証が失敗した場合、レポートには、満たさなかった最初のルールと、関連するエラー メッセージが含まれます。
{
valid : false ,
rule : 'integer' ,
error : 'Value must be an integer' ,
} ;
このアプローチは、複数のフィールドを含むフォームを送信する場合など、さまざまな検証ルールに対して複数の項目をチェックする必要がある場合に推奨されます。
「単一項目チェック」と同様に、 assert
メソッドを呼び出す必要がありますが、両方のパラメータに対してobject
指定する必要があります。最初のオブジェクトには検証する項目が含まれている必要があり、2 番目のオブジェクトは各項目のルールで構成されている必要があります。
const items = {
name : 5 ,
email : '[email protected]' ,
password : 'abcdefgh' ,
} ;
const rules = {
name : [ 'required' , 'string' ] ,
email : [ 'required' , 'email' ] ,
password : [ 'required' ] ,
} ;
Iodine . assert ( items , rules ) ;
「単品チェック」とは異なり、レポートは少し異なります。これには、すべてが成功したか、何かが失敗したかを簡単に確認できるトップレベルのvalid
キーが含まれています。次に、各アイテムのサブレポートを含むfields
キーが含まれます。サブレポートは、「単一項目チェック」で得られるものと同じものです。上記のコード例のレポートは次のとおりです。
{
valid : false ,
fields : {
name : {
valid : false ,
rule : 'string' ,
error : 'Value must be a string' ,
} ,
email : {
valid : true ,
rule : '' ,
error : '' ,
} ,
password : {
valid : true ,
rule : '' ,
error : '' ,
}
} ,
} ;
一部のルールには追加のパラメータが必要です。
let item_1 = 7 ;
let item_2 = 4 ;
Iodine . assertMin ( item_1 , 5 ) ; // true
Iodine . assertMin ( item_2 , 5 ) ; // false
高度な検証の場合は、セミコロン区切り文字を使用してルールにパラメータを追加することで、パラメータを指定できます。
let item_1 = 7 ;
let item_2 = 4 ;
Iodine . assert ( item_1 , [ 'required' , 'integer' , 'min:5' ] ) ;
Iodine . assert ( item_2 , [ 'required' , 'integer' , 'min:5' ] ) ;
または、必要に応じて、セミコロンで区切られたstring
の代わりにobject
としてルールを指定することもできます。
Iodine . assert ( 8 , [ 'required' , 'integer' , { rule : 'min' , param : 7 } , 'max:10' ] ) ;
高度な検証を行うには、オプションの値を許可することもできます。 Iodine はoptional
ルールでこれをサポートしています。
let item_1 = 7 ;
let item_2 = null ;
let item_3 = 'string' ;
Iodine . assert ( item_1 , [ 'optional' , 'integer' ] ) ;
Iodine . assert ( item_2 , [ 'optional' , 'integer' ] ) ;
Iodine . assert ( item_3 , [ 'optional' , 'integer' ] ) ;
重要: オプションの値を許可する場合は、それが配列内の最初のルールである必要があります。
Iodine には、英語用のデフォルトのエラー メッセージ セットが含まれています。ただし、 setErrorMessages
メソッドを使用して簡単に置き換えることができます。このメソッドには、メッセージを含むobject
である単一のパラメータが必要です。例については、Iodine のコンストラクターを参照してください。
Iodine は、エラーが発生したときに[FIELD]
および[PARAM]
プレースホルダーを自動的に置き換えます。したがって、新しいエラー メッセージの適切な位置にこれらのプレースホルダーを挿入する必要があります。
Iodine . setErrorMessages ( { same : `[FIELD] must be '[PARAM]'` } ) ; // English
Iodine . setErrorMessages ( { same : `[FIELD] doit être '[PARAM]'` } ) ; // French
多くの場合、すべてのエラー メッセージを置き換える必要はありません。代わりに、更新するか、新しいものを追加する必要があります。これを行うには、代わりにsetErrorMessage
を呼び出す必要があります。
Iodine . setErrorMessage ( 'passwordConfirmation' , 'Does not match password' ) ;
場合によっては、フィールドに特定のエラー メッセージを定義する必要がある場合や、使用される変数の名前とは異なるフィールドのラベルが必要な場合があります。
これを実現するには、ルールをプロパティとして、カスタム エラー メッセージを値として含むオブジェクトをassert
メソッドに渡します。
Iodine . assert ( value , [ 'required' ] , { 'required' : 'The "Label" must be present.' } ) ;
複数のフィールドに対して同じアプローチを使用することもできます。
let items = {
name : '' ,
} ;
let rules = {
name : [ 'required' ]
} ;
let errors = {
name : {
required : 'The "Label" must be present.'
}
} ;
Iodine . assert ( items , rules , errors ) ;
「単一項目チェック」はフィールド名をサポートしていないため、Iodine は代わりにデフォルト (「値」) を使用します。 「Value」が適切でない場合は、 setDefaultFieldName
メソッドを呼び出し、代わりに使用する代替string
値を指定できます。
Iodine . setDefaultFieldName ( 'Valeur' ) ;
assert
呼び出す前にsetDefaultFieldName
呼び出す必要があることに注意してください。
次の検証ルールが利用可能です。
ルール | 文字列キー | 説明 |
---|---|---|
assertAfter(日付/整数) | '後' | アイテムが指定されたDate またはタイムスタンプより後のDate であることを確認します |
assertAfterOrEqual(日付/整数) | 'afterOrEqual' | アイテムが指定されたDate またはタイムスタンプ以降のDate であることを確認します。 |
アサート配列 | '配列' | 項目がarray あることを確認する |
assertBefore(日付/整数) | '前に' | アイテムが指定されたDate またはタイムスタンプより前のDate であることを確認します |
assertBeforeOrEqual(日付/整数) | '前または等しい' | アイテムが指定されたDate またはタイムスタンプより前のDate であることを確認します。 |
アサートブール値 | 「ブール値」 | 項目がtrue またはfalse であることを確認します |
アサート日付 | '日付' | 項目がDate オブジェクトであることを確認します |
assertDifferent(値) | '違う' | 項目が指定された値と異なることを確認します (ルーズ比較を使用) |
assertEnds(値) | 「終わり」 | 項目が指定された値で終わることを確認します |
アサート電子メール | 「メール」 | アイテムが有効な電子メール アドレスであることを確認してください |
アサート偽 | 「偽り」 | 項目がfalse 、 'false' 、 0 または'0' のいずれかであることを確認します。 |
アサートイン(配列) | 'で' | 項目が指定されたarray 内にあることを確認します |
アサート整数 | '整数' | 項目がinteger であることを確認する |
アサートJson | 「json」 | 項目が解析可能な JSON オブジェクト文字string であることを確認します。 |
アサート最大長(制限) | '最大長' | 項目の文字長が指定された制限を超えていないことを確認してください |
assertMinLength(制限) | '最小長' | 項目の文字長が指定された制限を下回っていないことを確認してください |
アサートマックス(制限) | 「マックス」 | アイテムの数値が指定された制限を超えていないことを確認します |
アサート最小(制限) | 「分」 | アイテムの数値が指定された制限を下回っていないことを確認します |
assertNotIn(配列) | 「ない」 | 項目が指定されたarray 内にないことを確認します |
アサート数値 | 「数値」 | 項目がnumber または数値文字string であることを確認してください |
アサートオプション | 「オプション」 | オプションの値を許可します (複数のチェックで使用する場合のみ) |
assertRegexMatch(exp) | '正規表現一致' | 項目が指定された正規表現を満たしていることを確認します |
アサート必須 | '必須' | 項目がnull 、 undefined 、または空のstring ではないことを確認してください |
アサート同じ(値) | '同じ' | 項目が指定された値と同じであることを確認します (ルーズ比較を使用します)。 |
assertStartsWith(値) | 'で始まる' | 項目が指定された値で始まることを確認します |
アサート文字列 | '弦' | 項目がstring であることを確認する |
主張真実 | 「真実」 | 項目がtrue 、 'true' 、 1 または'1' のいずれかであることを確認します。 |
アサートURL | 「URL」 | アイテムが有効な URL であることを確認してください |
アサートUuid | 'uuid' | 項目がUUID であることを確認します |
各ルールの使用方法の例については、テストを調べてください。
Iodine を使用すると、 rule
メソッドを通じて独自のカスタム検証ルールを追加できます。このメソッドは 2 つのパラメータを受け入れます。 1 つ目はルールの名前です。 2 番目は、ルールを呼び出すときに Iodine が実行するclosure
です。
Iodine . rule ( 'lowerCase' , ( value ) => value === value . toLowerCase ( ) ) ;
重要: Iodine は、ルール名の最初の文字を自動的に大文字にし、接頭辞「assert」を付けます。したがって、プレフィックスを自分で追加することは避けるべきです。
Iodine . rule ( 'lowerCase' ) ; // right
Iodine . rule ( 'assertLowerCase' ) ; // wrong
ルールがパラメーターを受け入れる必要がある場合は、単にそれを 2 番目の引数としてclosure
に含めます。
Iodine . rule ( 'equals' , ( value , param ) => value == param ) ;
カスタム ルールのエラー メッセージを追加することもできます。
Iodine . rule ( 'equals' , ( value , param ) => value == param ) ;
Iodine . setErrorMessage ( 'equals' , "[FIELD] must be equal to '[PARAM]'" ) ;
Iodine の以前のバージョンでは、 async / await
使用した非同期カスタム ルールがサポートされていました。これは、ライブラリの保守を容易にするために削除されました。非同期ルールを使用していた場合、最初に非同期ロジックを実行し、結果を保存してから、Iodine でそれを検証することが推奨される戦略です。
Iodine への貢献をご検討いただきありがとうございます。追加のルールを含む PR を送信することは歓迎されますが、承認されるためには、ルールが何をするのかを説明し、他の人にとって役立つものであり、正しく機能することを確認するための適切なテストが含まれている必要があります。
プロジェクトをプルした後、依存関係をインストールするには:
npm install
テストを実行するには
npm run test
MIT ライセンス (MIT)。詳細については、ライセンス ファイルを参照してください。