フォームなどのバリデーション処理を実装できるライブラリ「v8n」を使ってみます。
設定方法
まずライブラリのインストールですが、今回は簡単にCDNから読み込みます。
<script src="https://unpkg.com/v8n/dist/v8n.min.js"></script>
例として文字列かどうかのバリデーションを試してみます。
const sample = 'My string!'; const isValid = v8n() .string() .test(sample); console.log(isValid); // true
v8n()にバリデーションのルールをつないでいき、最後にtest()でバリデーションをかける値を指定します。
v8nのデモページ
先ほどと同じ文字列のバリデーションで、先頭の文字と末尾の文字のチェックを追加してみます。
const sample = 'Hello'; const isValid = v8n() .string() .first('H') .last('o') .test(sample); console.log(isValid); // true
文字列で先頭が「H」、末尾が「o」かどうかのバリデーションになりました。
v8nのデモページ2
test()ではなくtestAll()を使うことで、バリデーションの結果を真偽値ではなく、配列で受け取ることもできます。
const validator = v8n() .string() .first('H') .last('o'); const sample = 'Hello'; const isValid = validator.testAll(sample); console.log(isValid); const sample2 = 'Hey'; const isValid2 = validator.testAll(sample2); console.log(isValid2);
バリデーションで問題のあった部分が配列に入るので、個別にエラーメッセージを出したい場合などに使用できます。
v8nのデモページ3
try catchを使った形でのバリデーションもできます。
const validator = v8n() .string() .first('H') .last('o'); try { const sample = 'Hello'; validator.check(sample); } catch (exception) { console.log(exception.rule); } try { const sample2 = 'Hey'; validator.check(sample2); } catch (exception) { console.log(exception.rule); }
test()の代わりにcheck()を使用します。
v8nのデモページ4
独自にバリデーションの作成もできます。
v8n.extend({ myCustomRule: expected => { return value => { console.log(value, expected); return value === expected; }; } }); const sample = 'string'; const isValid = v8n() .myCustomRule('customRuleOption') .test(sample); console.log(isValid); // false
v8n.extend()を使って設定して、返り値は真偽値にする必要があります。
v8nのデモページ5
ルール
デフォルトで用意されているバリデーションルールを見てみます。
ルールのデモページ
pattern() | 正規表現で指定した形でのバリデーション。 |
---|---|
equal() | 指定した値と等しいかどうかでのバリデーション。 「==」を用いているので厳密ではない。 |
exact() | 指定した値と厳密に一致するかどうかでのバリデーション。 |
string() | 文字列かどうかのバリデーション。 |
number() | 数値かどうかのバリデーション。 デフォルトだとNaNやInfinityの場合もtrueを返すが、引数にfalseを設定することで無効にできる。 |
numeric() | 数字かどうかのバリデーション。 |
boolean() | 真偽値かどうかのバリデーション。 |
undefined() | undefinedかどうかのバリデーション。 |
null() | nullかどうかのバリデーション。 |
array() | 配列かどうかのバリデーション。 |
object() | オブジェクトかどうかのバリデーション。 |
lowercase() | 全て小文字かどうかのバリデーション。 |
uppercase() | 全て大文字かどうかのバリデーション。 |
vowel() | 全て母音かどうかのバリデーション。 |
consonant() | 全て子音かどうかのバリデーション。 |
first() | 先頭の文字、もしくは配列の最初の項目かどうかのバリデーション。 |
last() | 末尾の文字、もしくは配列の最後の項目かどうかのバリデーション。 |
empty() | 空かどうかのバリデーション。 |
length() | 指定した長さかどうかのバリデーション。 |
minLength() | 指定した長さ以上であるかどうかのバリデーション。 |
maxLength() | 指定した長さ以下であるかどうかのバリデーション。 |
negative() | 負の数かどうかのバリデーション。 |
positive() | 正の数かどうかのバリデーション。 |
between() | 指定した範囲内かどうかのバリデーション。 range()の場合も同様。 |
lessThan() | 指定した値未満かどうかのバリデーション。 |
lessThanOrEqual() | 指定した値以下かどうかのバリデーション。 |
greaterThan() | 指定した値を超えるかどうかのバリデーション。 |
greaterThanOrEqual() | 指定した値以上かどうかのバリデーション。 |
even() | 偶数かどうかのバリデーション。 |
odd() | 奇数かどうかのバリデーション。 |
includes() | 指定した値を含む文字列、もしくは配列かどうかのバリデーション。 |
integer() | 整数かどうかのバリデーション。 |
修飾子
not | notに続くルールを反転してバリデーションを行う。 |
---|---|
some | 指定した配列内の1つ以上がバリデーションに合格している場合、trueを返す。 |
every | 指定した配列内の全ての項目がバリデーションに合格している場合、trueを返す。 |
コメントが承認されるまで時間がかかります。