Skip to content

Instantly share code, notes, and snippets.

@s-hiroshi
Created November 14, 2012 04:41
Show Gist options
  • Save s-hiroshi/4070292 to your computer and use it in GitHub Desktop.
Save s-hiroshi/4070292 to your computer and use it in GitHub Desktop.
JavaScript > snippets > バリデーション
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>Validation Test</title>
<link rel="stylesheet" href="http://code.jquery.com/qunit/qunit-1.10.0.css" media="all">
</head>
<body>
<div id="qunit"></div>
<script src="http://code.jquery.com/qunit/qunit-1.10.0.js"></script>
<script src="validation.js"></script>
<script src="validation_test.js"></script>
</body>
</html>
/**
* 入力チェック
*
* @author Hiroshi Sawai <[email protected]>
*/
function Validation() {};
/**
* undefined, null, 空文字''のときはfalse。
*
* @param values スカラー値または配列
* 引数なしで呼び出されたときはfalseを返す。
* ネストは考慮しない。
*/
Validation.isNotEmpty = function (values) {
var operands = [];
var i;
// 引数なし
if (typeof values === 'undefined') {
return false;
}
// scalar値は配列へ変換
if ((values instanceof Array) === false) {
operands.push(values)
} else {
operands = values;
}
for (i = 0; i < operands.length; i++) {
if (typeof operands[i] === 'undefined') {
return false;
}
if (operands[i] === null) {
return false;
}
if (operands[i] === '') {
return false;
}
}
return true;
}
/**
* 0より大きいかをチェック
*
* @param {Number} num
* 0より大きいときはtrue。それ以外はfalseを返す。
* 引数なしで呼び出したときはfalse
*/
Validation.isMoreThan0 = function(num) {
// キャスト失敗はNaNを返す(エラーではない)
// undefined, 空文字, nullはNaNを返す
var result = parseInt(num, 10);
// 数字以外
if (isNaN(result)) {
return false;
}
// 0以下
if ((num <= 0) === true) {
return false;
}
// 0より大きい
return true;
};
/**
* 0以上かをチェック
*
* @param {Number} num
* 0以上はtrue。それ以外はfalseを返す。
* 引数なしで呼び出したときはfalse
*/
Validation.is0AndMore = function(num) {
// キャスト失敗はNaNを返す(エラーではない)
// undefined, 空文字, nullはNaNを返す
var result = parseInt(num, 10);
// 数字以外
if (isNaN(result)) {
return false;
}
// 0未満
if ((num < 0) === true) {
return false;
}
// 0以上
return true;
};
module('isNotEmpty');
test('引数なしの呼び出しはfalse', function() {
equal(Validation.isNotEmpty(), false);
});
test('未定義値はfalse', function() {
var value;
equal(Validation.isNotEmpty(value), false);
});
test('null値はfalse', function() {
var o = {};
o = null;
equal(Validation.isNotEmpty(o), false);
});
test("空文字''はfalse", function() {
equal(Validation.isNotEmpty(''), false);
});
test('文字列aはtrue', function() {
equal(Validation.isNotEmpty('a'), true);
});
test("値にundefine, null, 空文字''を含まない配列はtrue", function() {
var arr = [];
arr[0] = 'a';
arr[1] = 'b';
equal(Validation.isNotEmpty(arr), true);
});
test("値にundefinedを含む配列はfalse", function() {
var arr = [];
arr[0];
arr[1] = 10;
equal(Validation.isNotEmpty(arr), false);
});
test("値にnullを含む配列はfalse", function() {
var arr = [];
arr[0] = {};
arr[0] = null;
arr[1] = 10;
equal(Validation.isNotEmpty(arr), false);
});
test("値に空文字''を含む配列はfalse", function() {
var arr = [];
arr[0] = 10;
arr[1] = '';
equal(Validation.isNotEmpty(arr), false);
});
module('isMoreThan0')
test('1はtrue', function() {
var num = 1;
equal(Validation.isMoreThan0(num), true);
});
test('0はfalse', function() {
var num = 0;
equal(Validation.isMoreThan0(num), false);
});
test('-1はfalse', function() {
var num = -1;
equal(Validation.isMoreThan0(num), false);
});
test('Infinityはfalse', function() {
var num = Infinity;
equal(Validation.isMoreThan0(Infinity), false);
});
test('NaNはfalse', function() {
var num = NaN;
equal(Validation.isMoreThan0(NaN), false);
});
module('is0AndMore')
test('1はtrue', function() {
var num = 1;
equal(Validation.isMoreThan0(num), true);
});
test('0はtrue', function() {
var num = 0;
equal(Validation.isMoreThan0(num), false);
});
test('-1はfalse', function() {
var num = -1;
equal(Validation.isMoreThan0(num), false);
});
test('Infinityはfalse', function() {
var num = Infinity;
equal(Validation.isMoreThan0(Infinity), false);
});
test('NaNはfalse', function() {
var num = NaN;
equal(Validation.isMoreThan0(NaN), false);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment