Bagaimana cara memeriksa apakah sebuah variabel null atau string kosong atau semua spasi di JavaScript?

102

Saya perlu memeriksa untuk melihat apakah sebuah variabel null atau memiliki semua ruang kosong atau hanya kosong ("").

Saya memiliki yang berikut ini, tetapi tidak berhasil:

var addr;
addr = "  ";

if (!addr) {
    // pull error 
}

Jika saya melakukan hal berikut, ini berhasil:

if (addr) {

}​

Yang saya butuhkan adalah sesuatu seperti metode C # String.IsNullOrWhiteSpace(value).

Nate Pet
sumber
3
Apakah Anda benar-benar berarti has *any* empty spaces? Atau maksud Anda is all empty spaces?
Madbreaks
1
bagaimana dengan undefined?
CodeToad

Jawaban:

139

Solusi non-jQuery yang meniru lebih dekat IsNullOrWhiteSpace, tetapi untuk mendeteksi null, kosong, atau hanya semua spasi:

function isEmptyOrSpaces(str){
    return str === null || str.match(/^ *$/) !== null;
}

...kemudian:

var addr = '  ';

if(isEmptyOrSpaces(addr)){
    // error 
}

* EDIT * Harap dicatat bahwa op secara khusus menyatakan:

Saya perlu memeriksa untuk melihat apakah var adalah null atau memiliki ruang kosong atau dalam hal ini hanya kosong .

Jadi sementara ya, "ruang putih" mencakup lebih dari nol, spasi atau kosong, jawaban saya dimaksudkan untuk menjawab pertanyaan spesifik op. Ini penting karena op mungkin TIDAK ingin menangkap hal-hal seperti tab, misalnya.

Madbreaks
sumber
66
Spasi putih juga dapat menyertakan tab, jenis spasi lainnya, dll. Gunakan /^\s*$/untuk menangkapnya juga.
berikan
2
@ Grant Saya sengaja TIDAK melakukan itu karena op berkata "Saya perlu memeriksa untuk melihat apakah var adalah null atau memiliki ruang kosong atau dalam hal ini hanya kosong" .
Madbreaks
5
Bagaimana dengan menggunakan test () daripada match ()? return str === null || (/ ^ * $ /). test (str);
Mario Levrero
1
@MarioLevrero Saya menyukainya! testjuga lebih cepat seingat saya.
Madbreaks
10
@Madbreaks op menyatakan "Yang saya butuhkan adalah sesuatu seperti metode C # ini: String.IsNullOrWhiteSpace". Metode itu memperlakukan tab sebagai spasi.
subsci
25
if (addr == null || addr.trim() === ''){
  //...
}

Sebuah nullperbandingan juga akan menangkap undefined. Jika Anda ingin falselulus juga, gunakan !addr. Untuk penukaran kompatibilitas browser mundur addr.trim()untuk $.trim(addr).

Ricardo Tomasi
sumber
1
"Jika Anda ingin false pass juga, gunakan! Addr" - rusak jika addrnol.
Madbreaks
1
mengapa yang pertama ==dan yang kedua cocok ===?
Maks
Menggunakan "addr == null" juga akan cocok dengan yang tidak ditentukan. Jika Anda menggunakan "addr === null", ini hanya akan cocok dengan null. Menggunakan === untuk kecocokan kedua memaksa kecocokan hanya pada string kosong.
Ed Downs
19

Kamu bisa memakai if(addr && (addr = $.trim(addr)))

Ini memiliki keuntungan dengan benar-benar menghapus whitespace luar addrdaripada hanya mengabaikannya saat melakukan pemeriksaan.

Referensi: http://api.jquery.com/jQuery.trim/

ThiefMaster
sumber
2
Dengan asumsi, tentu saja op ingin menghapus spasi. :)
Madbreaks
1
Jawaban Anda akan mengembalikan positif palsu jika addrdiinisialisasi dengan misalnya integer.
Madbreaks
Tanpa informasi lebih lanjut, saya menganggap var selalu berupa string jika tidak null / undefined.
ThiefMaster
1
Op berkata "periksa jika variabel ...", dan contohnya menunjukkan bahwa variabel adalah string, tapi saya akan berasumsi bahwa itu hanya contoh untuk mendemonstrasikan ide.
Madbreaks
5
isEmptyOrSpaces(str){
    return !str || str.trim() === '';
}
Ali
sumber
2
Apakah ada kebutuhan untuk menduplikasi jawaban yang sudah ada? Atau apakah Anda mengubah sesuatu pada jawaban sebelumnya yang membuat perbedaan relevan?
Nico Haase
4

Anda dapat membuat metode Anda sendiri Setara dengan

String.IsNullOrWhiteSpace(value)

function IsNullOrWhiteSpace( value) {

    if (value== null) return true;

    return value.replace(/\s/g, '').length == 0;
}
Shehzad
sumber
1
\scocok dengan lebih dari sekadar spasi
Madbreaks
4

Saat memeriksa ruang putih, metode c # menggunakan standar Unicode. Spasi putih mencakup spasi, tab, carriage return, dan banyak kode karakter non-cetak lainnya. Jadi Anda lebih baik menggunakan:

function isNullOrWhiteSpace(str){
    return str == null || str.replace(/\s/g, '').length < 1;
}
Joao Leme
sumber
Op secara eksplisit menyatakan tujuannya adalah untuk memeriksa spasi , bukan spasi.
Madbreaks
5
Op mengatakan "Yang saya butuhkan adalah sesuatu seperti metode C # ini: String.IsNullOrWhiteSpace (value)". Dan jika Anda hanya memeriksa spasi jangan beri nama fungsi Anda isNullOrWhiteSpace tetapi beri nama IsNullOrEmtpy.
Joao Leme
Metode C # akan bekerja untuk memeriksa apakah sebuah string adalah null atau serangkaian spasi. Op menginginkan sesuatu yang "seperti" itu, tetapi untuk memeriksa spasi secara spesifik.
Madbreaks
4

Pertanyaan lama, tapi saya pikir itu membutuhkan jawaban yang lebih sederhana.

Anda cukup melakukan:

var addr = "  ";

if (addr && addr.trim()) {

    console.log("I'm not null, nor undefined, nor empty string, nor string composed of whitespace only.");

}
sandre89
sumber
1
Bukankah seharusnya begitu addr && addr.trim()? Dengan satu single &itu tidak berhasil untuk saya tetapi berhasil dengan &&.
markv12
0

Coba ini

/**
  * Checks the string if undefined, null, not typeof string, empty or space(s)
  * @param {any} str string to be evaluated
  * @returns {boolean} the evaluated result
*/
function isStringNullOrWhiteSpace(str) {
    return str === undefined || str === null
                             || typeof str !== 'string'
                             || str.match(/^ *$/) !== null;
}

Anda bisa menggunakannya seperti ini

isStringNullOrWhiteSpace('Your String');
Rod lauro Romarate
sumber
0
isEmptyOrSpaces(str){
    return str === null || str.trim().length>0;
}
Thalinda Bandara
sumber
0
function isEmptyOrSpaces(str){
    return str === null || str.match(/^[\s\n\r]*$/) !== null;
}
pico
sumber
0

Anda dapat mencoba ini:

do {
   var op = prompt("please input operatot \n you most select one of * - / *  ")
} while (typeof op == "object" || op == ""); 
// execute block of code when click on cancle or ok whthout input
hamedalavi
sumber