バリデーションの処理をスラスラと書くことができる javascript用のライブラリ「v8n」の紹介です。
値の整合性をチェックするバリデーションの処理は避けられない道で、" 値が空じゃないか " から始まり " Eメール用の正規表現 "、 " 型のチェック " など if文のネストを重ねた処理を何度も書いたことがある人も少なくないと思います。
そのようなバリデーションの処理がスッキリと書けるようになる javascript用のライブラリが「v8n」です。
- バリデーションの処理をメソッドチェーンを使ってわかりやすく書くことができます

v8n は ' npm
' 又は ' yarn
' などのパッケージマネージャーを通してコマンドライン上からインストールします。
また、HTML上の ' script
' タグから直接ライブラリを読み込めるよう、CDN用のURLも用意されています。
# npm
npm install v8n
# yarn
yarn add v8n
# cdn
https://unpkg.com/v8n/dist/v8n.min.js # unpkg
https://cdn.jsdelivr.net/npm/v8n/dist/v8n.min.js #jsdelivr
v8n の基本的な使い方は主に2種類あり、1つめは ' true 又は false の真偽で返す ' 方法 、2つ目は ' 例外処理( throw ) で返す ' 方法です。
メソッドの最後が ' .test( 検証する値 )
' で終われば Bool型で値を返します。
import v8n from "v8n";
let val = 'Hello world'
const isValid = v8n()
.not.null() // ルール
.string() // ルール
.first("H") // ルール
.last("d") // ルール
.test(val); // test メソッドを使えば Boolで返す
isValid; // true
メソッドの最後が ' .check(検証する値)
' で終わると エラー内容のオブジェクトで値を返します。
import v8n from "v8n";
var val = 25;
try {
v8n()
.number() // 数値型
.between(10, 20) // ルール 10 ~ 20の間
.check(val); // 値を検証 *値が25なので例外が発生
} catch (ex) {
console.log(ex.rule.name); // "between"
console.log(ex.rule.args); // [10, 20]
console.log(ex.value); // 25
console.log(ex.cause); // Rule failed!
// throw ex.cause; // 実際に例外を発生させる時は throw と合わせます
}
v8n は ' v8n()
' メソッドを呼び出した後、 用意されているルール(値の検証) メソッドを連結して簡単に使用することができます。
例えば、Twitter用のIDが正しいフォーマットか検証するバリデーションを作成するのは下記のよう書くことができます。
( * ' .not.ルールメソッド()
' を使えば ' !=
' と同等の事ができます )
/* TwitterIDかどうかチェック */
const v8n = require('v8n');
// チェックする値
let twitterId = '@Twitter';
const checkTwitter = v8n()
.not.null() // 値が空じゃないか
.string() // 文字列型
.first('@') // '@' から始まっているか
.length(5, 16) // @を含む5文字以上16文字以内に収まっているかどうか *twitterの使用上は 4-15文字
.test(twitterId); // 値のテスト
console.log(checkTwitter); // true
よく有りがちな email 用のバリデーションもスッキリと書くことが出来ます。
const v8n = require("v8n");
// 検証用の Eメール文字列
let email = "test@example.com";
const checkEmail = v8n()
.not.null() // 値がnullじゃないか
.string() // 文字列
.minLength(5) // a@b.c を想定して最低5文字
.pattern(/[^\s@]+@[^\s@]+\.[^\s@]+/) // eメール用の正規表現
.test(email); // 検証
console.log(checkEmail); // true
/*******************************/
/* 再利用可能な外部モジュールにする場合 */
const v8n = require("v8n");
module.exports = val => {
return v8n()
.not.null()
.string()
.minLength(5)
.pattern(/[^\s@]+@[^\s@]+\.[^\s@]+/)
.test(val);
};
* 用意されている ルール用のメソッド ( version 1.0.1時点)
メソッド名 | 説明 |
---|---|
string() | 文字列型 |
number() | 数値型( e.x.p : OK '10', OK 10 ) |
integer() | 数値型( e.x.p : OK 10, NG '10' ) |
boolean() | 真偽型 ( true || false ) |
array() | 配列型 |
undefined() | 値が undefined 型 |
null() | 値が null 型 |
empty() | 値が空 |
pattern(正規表現のパターン) | 正規表現 |
equal(予期している値) | 等しい |
exact(予期している値) | 型を含めた equal と同等 |
lowercase() | 小文字(英字) |
uppercase() | 大文字(英字) |
vowel() | 母音(a, e, i, o, u) |
consonant() | 子音(a, e, i, o, u 以外) |
first(予期している値) | 文字列であれば最初の文字、配列であれば最初の要素 |
last(予期している値) | 文字列であれば最後の文字、配列であれば最後の要素 |
length(min数値, max数値) | 値の長さ |
minLength(予期している最小数値) | 最小数値 |
maxLength(予期している最大数値) | 最大数値 |
nagative() | マイナスの数値 |
positive() | プラスの数値(マイナスではない数値) |
between(min数値, max数値) | 数値が min ~ maxの間に収まっているか |
range(min数値, max数値) | 数値が min ~ maxの間に収まっているか( between メソッドと同等) |
lessThan(数値) | 検証する値がlessThanメソッドの数値以下か |
lessThanOrEqual(数値) | 検証する値がlessThanOrEqualメソッドの数値以下か (数値が検証値と同じ場合は true) |
greaterThan(数値) | 検証する値がgreaterThanメソッドの数値以上か |
greaterThanOrEqual(数値) | 検証する値がgreaterThanOrEqualメソッドの数値以上か (数値が検証値と同じ場合は true) |
even() | 整数 |
odd() | 奇数 |
include(値) | 検証する値がincludeメソッド内の値に含まれているか |
v8nは 再利用可能な自作バリデーション用 メソッドが簡単に作れるように設計されているので、サーバーサイド、ブラウザを選ばず様々なプロジェクトで役に立ちそうなライブラリです。
Github : imbrn/v8n