JavaScript 入力値のバリデーション的なもの

入力された値をバリデーションする処理を自分で書いてみたらどんな感じになるかやってみました。

型のチェックがなかったり、穴がいろいろありますが、イメージしていたのはこんな感じです。

const notEmpty = errorMessages => value => {
	return value !== '' ? '' : errorMessages;
};
const max = (maxLength, errorMessages) => value => {
	return value.length <= maxLength ? '' : errorMessages;
};
const min = (minLength, errorMessages) => value => {
	return value.length >= minLength ? '' : errorMessages;
};

const validate = (value, funcs) => {
	const errors = funcs.map(f => f(value)).filter(error => error !== '');
  return errors;
};


console.log(validate('', [notEmpty('必須です'), max(5, '5文字以下にしてください')])); //["必須です"]

console.log(validate('tamibouz', [notEmpty('必須です'), max(5, '5文字以下にしてください')])); //["5文字以下にしてください"]

console.log(validate('ta', [notEmpty('必須です'), max(5, '5文字以下にしてください'), min(3, '3文字以上にしてください')])); //["3文字以上にしてください"]

console.log(validate('tami', [notEmpty('必須です'), max(5, '5文字以下にしてください'), min(3, '3文字以上にしてください')])); //[]