Skip to content

Instantly share code, notes, and snippets.

@upsilon
Created August 16, 2012 11:20
Show Gist options
  • Save upsilon/3369426 to your computer and use it in GitHub Desktop.
Save upsilon/3369426 to your computer and use it in GitHub Desktop.
PHPでGETパラメータとかの空値チェックしたいんだけど何これ
<?php
require_once '/path/to/lime.php';
function test_empty_values($lime, $validator)
{
/* これは空値と見なしたい */
$lime->ok($validator(null), "null");
$lime->ok($validator(''), "''");
$lime->ok($validator(' '), "' '");
/* これは空値と見なしたくない */
$lime->ok(!$validator('foo'), "'foo'");
$lime->ok(!$validator('0'), "'0'");
$lime->ok(!$validator('1'), "'1'");
$lime->ok(!$validator('true'), "'true'");
$lime->ok(!$validator('false'), "'false'");
}
$lime = new lime_test();
$lime->diag('(bool)!$value'); /* ダメ */
test_empty_values($lime, function ($value) {
return !$value;
});
$lime->diag('is_null($value)'); /* ダメ */
test_empty_values($lime, function ($value) {
return is_null($value);
});
$lime->diag('empty($value)'); /* ダメ */
test_empty_values($lime, function ($value) {
return empty($value);
});
$lime->diag('$value = trim($value); empty($value)'); /* ダメ */
test_empty_values($lime, function ($value) {
$value = trim($value);
return empty($value);
});
/* ここから上はテスト通過しない */
/* ここから下はテスト通過する */
$lime->diag('$value = trim($value); empty($value) && !is_numeric($value)'); /* OK */
test_empty_values($lime, function ($value) {
$value = trim($value);
return empty($value) && !is_numeric($value);
});
$lime->diag('$value = trim($value); is_null($value) || 0 === strlen($value)'); /* OK */
test_empty_values($lime, function ($value) {
$value = trim($value);
return is_null($value) || 0 === strlen($value);
});
@upsilon
Copy link
Author

upsilon commented Aug 16, 2012

実行結果

# (bool)!$value
ok 1 - null
ok 2 - ''
not ok 3 - '     '
ok 4 - 'foo'
not ok 5 - '0'
ok 6 - '1'
ok 7 - 'true'
ok 8 - 'false'
# is_null($value)
ok 9 - null
not ok 10 - ''
not ok 11 - '     '
ok 12 - 'foo'
ok 13 - '0'
ok 14 - '1'
ok 15 - 'true'
ok 16 - 'false'
# empty($value)
ok 17 - null
ok 18 - ''
not ok 19 - '     '
ok 20 - 'foo'
not ok 21 - '0'
ok 22 - '1'
ok 23 - 'true'
ok 24 - 'false'
# $value = trim($value); empty($value)
ok 25 - null
ok 26 - ''
ok 27 - '     '
ok 28 - 'foo'
not ok 29 - '0'
ok 30 - '1'
ok 31 - 'true'
ok 32 - 'false'
# $value = trim($value); empty($value) && !is_numeric($value)
ok 33 - null
ok 34 - ''
ok 35 - '     '
ok 36 - 'foo'
ok 37 - '0'
ok 38 - '1'
ok 39 - 'true'
ok 40 - 'false'
# $value = trim($value); is_null($value) || 0 === strlen($value)
ok 41 - null
ok 42 - ''
ok 43 - '     '
ok 44 - 'foo'
ok 45 - '0'
ok 46 - '1'
ok 47 - 'true'
ok 48 - 'false'

@upsilon
Copy link
Author

upsilon commented Aug 16, 2012

(参考)PHP: PHP 型の比較表 - Manual
http://php.net/manual/ja/types.comparisons.php

@upsilon
Copy link
Author

upsilon commented Aug 16, 2012

一方、C#では string.IsNullOrWhiteSpace(value) と書いた

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment