web-dev-qa-db-ja.com

JavaScriptで空/未定義/ null文字列を確認するにはどうすればいいですか?

私は thread を見ました、しかし私はJavaScript特有の例を見ませんでした。 JavaScriptで利用できる単純なstring.Emptyはありますか、それとも""をチェックするだけのケースですか?

2425
casademora

値があるかどうかだけを確認したい場合は、次のようにします。

if (strValue) {
    //do something
}

特にnullよりも空の文字列をチェックする必要がある場合は、 ""演算子 を使用して===をチェックするのが最善の方法だと思います。に対して)。

if (strValue === "") {
    //...
}
3068
bdukes

文字列が空、null、または未定義かどうかを確認するには、次のようにします。

function isEmpty(str) {
    return (!str || 0 === str.length);
}

文字列が空白、null、または未定義かどうかを確認するには、次のようにします。

function isBlank(str) {
    return (!str || /^\s*$/.test(str));
}

文字列が空白か空白のみを含むかどうかを確認するには

String.prototype.isEmpty = function() {
    return (this.length === 0 || !this.trim());
};
990
Jano González

上記のすべては良いですが、これはさらに良くなります。 !! not )演算子を使用してください。

if(!!str){
some code here;
}

あるいは型キャストを使う:

if(Boolean(str)){
    codes here;
}

どちらも同じ機能を実行し、変数をboolean型にキャストします。ここで、strは変数です。
null,undefined,0,000,"",falseに対してfalseを返します。
文字列 "0"と空白 ""に対してtrueを返します。

254
karthick.sk

文字列が単なる空のスペースではないことを確認する必要がある場合(これはフォームの検証用であると想定しています)、スペースを置き換える必要があります。

if(str.replace(/\s/g,"") == ""){
}
95
Sugendran

str.Emptyに最も近いもの(strがStringであることを前提としています)は、次のとおりです。

if (!str.length) { ...
88
Ateş Göral

私が使う :

function empty(e) {
  switch (e) {
    case "":
    case 0:
    case "0":
    case null:
    case false:
    case typeof this == "undefined":
      return true;
    default:
      return false;
  }
}

empty(null) // true
empty(0) // true
empty(7) // false
empty("") // true
empty((function() {
    return ""
  })) // false
54
Jet

関数:

function is_empty(x)
{
   return ( 
        (typeof x == 'undefined')
                    ||
        (x == null) 
                    ||
        (x == false)  //same as: !x
                    ||
        (x.length == 0)
                    ||
        (x == "")
                    ||
        (x.replace(/\s/g,"") == "")
                    ||
        (!/[^\s]/.test(x))
                    ||
        (/^\s*$/.test(x))
  );
}

p.s. Javascriptでは、returnの後に改行を使用しないでください。

31
T.Todua

試してください:

if (str && str.trim().length) {  
    //...
}
30
Yang Dong
var s; // undefined
var s = ""; // ""
s.length // 0

JavaScriptに空の文字列を表すものは何もありません。 length(varが常に文字列であることがわかっている場合)または""に対してチェックを行います。

27
cllpse

私はほとんどの効率的なメソッドについてあまり心配しないでしょう。あなたの意図に最も明確なものを使用してください。私にとってそれは通常strVar == ""です。

編集: Constantin からのコメントごとに、もしstrVarが整数0の値を含むことになるかもしれないなら、それは確かにそれらの意図を明確にする状況の1つでしょう。

26
Chris Noe

lodash :_.isEmpty(value)を使用できます。

これは、{}''nullundefinedなどのような多くのケースをカバーします。

しかし、true型の Javascriptプリミティブデータ型の場合は常にNumberを返します_.isEmpty(10)または_.isEmpty(Number.MAX_VALUE)の両方はtrueを返します。

25
Moshii

正規表現を使うこともできます。

if((/^\s*$/).test(str)) { }

空または空白で埋められた文字列をチェックします。

19
oem

たくさんの答え、そしてさまざまな可能性があります。

迅速で簡単な実装に間違いなく、勝者は次のとおりです。if (!str.length) {...}

しかし、他にもたくさんの例があります。これを実行するための最善の機能的方法、私はお勧めします:

function empty(str)
{
    if (typeof str == 'undefined' || !str || str.length === 0 || str === "" || !/[^\s]/.test(str) || /^\s*$/.test(str) || str.replace(/\s/g,"") === "")
    {
        return true;
    }
    else
    {
        return false;
    }
}

ちょっと過度だと思います。

17
tfont
  1. var a;が存在することを確認してください
  2. 値の中のfalse spacesを削除してからemptinessをテストします

    if ((a)&&(a.trim()!=''))
    {
      // if variable a is not empty do this 
    }
    
16

また、空白で埋められた文字列を "空"と見なす場合もあります。この正規表現でテストすることができます:

!/\S/.test(string); // Returns true if blank.
14
Wab_Z

私は通常このようなものを使います、

if (!str.length) {
//do some thing
}
11
user2086641

文字列内にヌル文字が含まれる可能性を考慮した答えに気付いたことはありません。たとえば、null文字列があるとします。

var y = "\0"; // an empty string, but has a null character
(y === "") // false, testing against an empty string does not work
(y.length === 0) // false
(y) // true, this is also not expected
(y.match(/^[\s]*$/)) // false, again not wanted

その無効性をテストするには、次のようにします。

String.prototype.isNull = function(){ 
  return Boolean(this.match(/^[\0]*$/)); 
}
...
"\0".isNull() // true

Null文字列と空の文字列に対して機能し、すべての文字列に対してアクセス可能です。さらに、他のJavaScriptの空または空白文字(つまり、改行なしのスペース、バイトオーダーマーク、行/段落の区切り記号など)を含めるように拡張することもできます。

9
Bikush

空の文字列だけでなく空の文字列も検出する必要がある場合は、Goralの回答に追加します。

function isEmpty(s){
    return !s.length;    
}

function isBlank(s){
    return isEmpty(s.trim());    
}
9
Josef.B

これらすべての答えはいいです。

しかし、変数が文字列で、スペースだけを含んでいるのではないことがわかりません(これは私にとって重要です)。そして '0'(文字列)を含めることができます。

私のバージョン:

function empty(str){
    return !str || !/[^\s]+/.test(str);
}

empty(null); // true
empty(0); // true
empty(7); // false
empty(""); // true
empty("0"); // false
empty("  "); // true

jsfiddle のサンプル。

8
Andron

正確に空の文字列かどうかを確認するには

if(val==="")...

空の文字列であるかどうかを確認するにはOR値がないことと論理的に等価です(null、未定義、0、NaN、false、...)。

if(!val)...
7
Luca C.

一方、 null、未定義、 ''、 ''、{}、[] などのすべての「空」をチェックする関数を1つ持つことができます。だから私はちょうどこれを書いた。

var isEmpty = function(data) {
    if(typeof(data) === 'object'){
        if(JSON.stringify(data) === '{}' || JSON.stringify(data) === '[]'){
            return true;
        }else if(!data){
            return true;
        }
        return false;
    }else if(typeof(data) === 'string'){
        if(!data.trim()){
            return true;
        }
        return false;
    }else if(typeof(data) === 'undefined'){
        return true;
    }else{
        return false;
    }
}

ユースケースと結果.

console.log(isEmpty()); // true
console.log(isEmpty(null)); // true
console.log(isEmpty('')); // true
console.log(isEmpty('  ')); // true
console.log(isEmpty(undefined)); // true
console.log(isEmpty({})); // true
console.log(isEmpty([])); // true
console.log(isEmpty(0)); // false
console.log(isEmpty('Hey')); // false
7
Imran

空白文字列を無視して、これを使用してnull、空、未定義をチェックすることができます。

var obj = {};
(!!obj.str) //returns false

obj.str = "";
(!!obj.str) //returns false

obj.str = null;
(!!obj.str) //returns false

簡潔でそれは未定義のプロパティに対して機能しますが、最も読みやすいものではありません。

7
mricci

私はあなたがテスター関数にあなたが文字列と空でない/ null値を渡さないなら何が起こるか調査しました。多くの人が知っているように、(0 == "")はjavascriptで真実ですが、0は値で空でもnullでもないので、あなたはそれをテストしたいかもしれません。

次の2つの関数は、未定義、null、空/空白の値に対してのみtrueを返し、それ以外のすべての数値(ブール値、オブジェクト、式など)に対してはfalseを返します。

function IsNullOrEmpty(value)
{
    return (value == null || value === "");
}
function IsNullOrWhiteSpace(value)
{
    return (value == null || !/\S/.test(value));
}

より複雑な例がありますが、これらは単純で一貫した結果をもたらします。未定義かどうかをテストする必要はありません。(value == null)チェックに含まれているからです。このようにC#の振る舞いをStringに追加することで、C#の振る舞いを模倣することもできます。

String.IsNullOrEmpty = function (value) { ... }

Stringクラスのインスタンスがnullの場合はエラーになるので、これをStringsプロトタイプに入れたくはありません。

String.prototype.IsNullOrEmpty = function (value) { ... }
var myvar = null;
if (1 == 2) { myvar = "OK"; } // could be set
myvar.IsNullOrEmpty(); // throws error

次の値の配列でテストしました。疑問がある場合は、ループして機能をテストすることができます。

// Helper items
var MyClass = function (b) { this.a = "Hello World!"; this.b = b; };
MyClass.prototype.hello = function () { if (this.b == null) { alert(this.a); } else { alert(this.b); } };
var z;
var arr = [
// 0: Explanation for printing, 1: actual value
    ['undefined', undefined],
    ['(var) z', z],
    ['null', null],
    ['empty', ''],
    ['space', ' '],
    ['tab', '\t'],
    ['newline', '\n'],
    ['carriage return', '\r'],
    ['"\\r\\n"', '\r\n'],
    ['"\\n\\r"', '\n\r'],
    ['" \\t \\n "', ' \t \n '],
    ['" txt \\t test \\n"', ' txt \t test \n'],
    ['"txt"', "txt"],
    ['"undefined"', 'undefined'],
    ['"null"', 'null'],
    ['"0"', '0'],
    ['"1"', '1'],
    ['"1.5"', '1.5'],
    ['"1,5"', '1,5'], // valid number in some locales, not in js
    ['comma', ','],
    ['dot', '.'],
    ['".5"', '.5'],
    ['0', 0],
    ['0.0', 0.0],
    ['1', 1],
    ['1.5', 1.5],
    ['NaN', NaN],
    ['/\S/', /\S/],
    ['true', true],
    ['false', false],
    ['function, returns true', function () { return true; } ],
    ['function, returns false', function () { return false; } ],
    ['function, returns null', function () { return null; } ],
    ['function, returns string', function () { return "test"; } ],
    ['function, returns undefined', function () { } ],
    ['MyClass', MyClass],
    ['new MyClass', new MyClass()],
    ['empty object', {}],
    ['non-empty object', { a: "a", match: "bogus", test: "bogus"}],
    ['object with toString: string', { a: "a", match: "bogus", test: "bogus", toString: function () { return "test"; } }],
    ['object with toString: null', { a: "a", match: "bogus", test: "bogus", toString: function () { return null; } }]
];
7
JHM

私は組み合わせを使用します、最も速いチェックは最初です。

function isBlank(pString){
    if (!pString || pString.length == 0) {
        return true;
    }
    // checks for a non-white space character 
    // which I think [citation needed] is faster 
    // than removing all the whitespace and checking 
    // against an empty string
    return !/[^\s]+/.test(pString);
}
7
Will

私は通常次のようなものを使います。

if (str == "") {
     //Do Something
}
else {
     //Do Something Else
}
6
jmc734

isEmpty()メソッドはありません。型と長さをチェックする必要があります。

if (typeof test === 'string' && test.length === 0){
  ...

testundefinedまたはnullの場合、ランタイムエラーを回避するために型チェックが必要です。

6

String object in JavaScript に簡単に追加して、何度も繰り返し使用できます。
''の空の文字列をチェックしたい場合は、以下のコードのような単純なものでも問題ありません。

String.prototype.isEmpty = String.prototype.isEmpty || function() {
  return !(!!this.length);
}

それ以外の場合、''の空の文字列と' 'の両方をスペースでチェックしたい場合は、以下のコードのようにtrim()を追加するだけで可能です。

String.prototype.isEmpty = String.prototype.isEmpty || function() {
   return !(!!this.trim().length);
}

そして、あなたはそれをこのように呼ぶことができます:

''.isEmpty(); //return true
'alireza'.isEmpty(); //return false
5
Alireza

チェックする変数が文字列だとは思わないでください。この変数が長さを持っていれば、それは文字列だと思い込まないでください。

重要なことは、アプリが何をしなければならず、受け入れることができるかについて慎重に考えることです。堅牢なものを構築してください。

もしあなたのメソッド/関数が空でない文字列だけを処理すべきなら、引数が空ではない文字列であるかどうかをテストしてください。

あなたがここでいくつかのアドバイスに注意深く従わないならば爆発する何かの例として。


var getLastChar = function (str) {
 if (str.length > 0)
   return str.charAt(str.length - 1)
}

getLastChar('hello')
=> "o"

getLastChar([0,1,2,3])
=> TypeError: Object [object Array] has no method 'charAt'

だから、私は固執する


if (myVar === '')
  ...
5
Kev

これを試して

str.value.length == 0
5
Doug

以下の方法で検証し、違いを理解することができます。

var j = undefined;
console.log((typeof j == 'undefined') ? "true":"false");
var j = null; 
console.log((j == null) ? "true":"false");
var j = "";
console.log((!j) ? "true":"false");
var j = "Hi";
console.log((!j) ? "true":"false");
4
KARTHIKEYAN.A

アンダースコアのJavaScriptライブラリ http://underscorejs.org/ は、空の文字列や他の空のオブジェクトをチェックするための非常に便利な_.isEmpty()関数を提供します。

参照: http://underscorejs.org/#isEmpty

isEmpty _.isEmpty(object)
列挙可能オブジェクトに値が含まれていない場合(列挙可能な所有者プロパティがない場合)はtrueを返します。文字列および配列のようなオブジェクトの場合、_.isEmptyはlengthプロパティが0かどうかを調べます。

_.isEmpty([1, 2, 3]);
=> false

_.isEmpty({});
=>真

他の非常に便利なアンダースコア機能は次のとおりです。
http://underscorejs.org/#isNull_.isNull(object)
http://underscorejs.org/#isUndefined_.isUndefined(value)
http://underscorejs.org/#has_.has(object, key)

4
Thaddeus Albers
function tell()
{
var pass = document.getElementById('pasword').value;
var plen = pass.length;

now you can check if your string is empty as like 
if(plen==0)
{
         alert('empty');
}
else
{
   alert('you entered something');
}
}


<input type='text' id='pasword' />

これはフィールドが空かどうか調べる一般的な方法でもあります。

4
Muhammad Salman

JavaScriptはアヒルの型付けされた言語であるため、常に型もチェックする必要があります。そのため、プロセスの途中でデータがいつどのように変更されたかがわかりません。だから、これがより良い解決策です:

var str = "";
if (str === "") {
    //...
}
3
Sazid

私は空白の代わりに空白でないテストを使うことを好みます

function isNotBlank(str) {
   return (str && /^\s*$/.test(str));
}
3
Mubashar Ahmad

未定義の用語を通過させようとしていないことを確認することもお勧めです。

function TestMe() {
  if((typeof str != 'undefined') && str) {
    alert(str);
  }
 };

TestMe();

var str = 'hello';

TestMe();

通常、オブジェクトインスタンスの文字列属性が空ではないときに何かしたい場合があります。属性が常に存在するとは限らないことを除けば、どちらでも構いません。

2
dkinzer

別の方法ですが、私はbdukesの答えが最善だと思います。

   var myString = 'hello'; 
    if(myString.charAt(0)){
    alert('no empty');
    }
    alert('empty');
2
GibboK

これを試して:

export const isEmpty = string => (!string || string.length === 0);
0
V1NNY

現在のところ、string.emptyのように文字列が空かどうか調べる直接的な方法はありません。しかし、あなたのコードでは、次のような空文字列のラッパーチェックを使うことができます。

// considering the variable in which your string is saved is named str.
if(str !== null || str!== undefined){
  if (str.length>0) { 

  // Your code here which you want to run if the string is not empty.

  }
}

これを使用して、文字列が未定義でもnullでもないことを確認できます。未定義、null、および空は3つの異なることを忘れないでください。

0
Harshit Agarwal