Bir değişkenin boş veya boş bir dize veya JavaScript'te tüm boşluklar olup olmadığı nasıl kontrol edilir?


106

Bir değişkenin boş olup olmadığını veya tüm boşlukları olup olmadığını veya sadece boş ("") olup olmadığını kontrol etmem gerekiyor.

Aşağıdakilere sahibim ama çalışmıyor:

var addr;
addr = "  ";

if (!addr) {
    // pull error 
}

Aşağıdakileri yaparsam işe yarıyor:

if (addr) {

}​

İhtiyacım olan şey, C # yöntemi gibi bir şey String.IsNullOrWhiteSpace(value).


3
Gerçekten has *any* empty spacesmi demek istiyorsun ? Yoksa demek istiyorsun is all empty spaces?
Madbreaks

1
tanımsız ne olacak?
CodeToad

Yanıtlar:


141

Daha yakından taklit eden IsNullOrWhiteSpace, ancak yalnızca boş, boş veya tüm boşlukları algılamak için jQuery olmayan bir çözüm :

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

...sonra:

var addr = '  ';

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

* DÜZENLE * Lütfen op özellikle şunları belirtir:

Bir varlığın boş olup olmadığını veya herhangi bir boşluğun olup olmadığını veya bunun için sadece boş olup olmadığını kontrol etmem gerekiyor .

Öyleyse evet, "beyaz boşluk" boş, boşluk veya boşluktan daha fazlasını kapsarken, cevabım op'un spesifik sorusunu yanıtlamayı amaçlamaktadır. Bu önemlidir çünkü op, örneğin sekmeler gibi şeyleri yakalamak istemeyebilir.


67
Boşluklar ayrıca sekmeler, başka tür boşluklar vb. İçerebilir. Bunları /^\s*$/yakalamak için de kullanın .
hibe

2
@Grant bunu kasıtlı olarak YAPMADIM çünkü op "bir var null olup olmadığını veya herhangi bir boş alan olup olmadığını veya bu konuda sadece boş olup olmadığını kontrol etmem gerekiyor" dedi .
Madbreaks

5
Match () yerine test () kullanmaya ne dersiniz? dönüş str === boş || (/ ^ * $ /). test (dizi);
Mario Levrero

1
@MarioLevrero Beğeniyorum! testayrıca hatırladığım kadarıyla daha hızlı.
Madbreaks

10
@Madbreaks, "İhtiyacım olan şey şu C # yöntemi gibi: String.IsNullOrWhiteSpace" dedi. Bu yöntem, sekmeleri boşluk olarak değerlendirir.
subsci

27
if (addr == null || addr.trim() === ''){
  //...
}

Bir nullkarşılaştırma da yakalayacaktır undefined. Siz falsede geçmek istiyorsanız kullanın !addr. Geriye dönük tarayıcı uyumluluğu addr.trim()için $.trim(addr).


1
"Eğer yanlışın da geçmesini istiyorsanız,! Addr kullanın" - addrsıfır ise bozulur .
Madbreaks

1
neden birinci ==ve ikinci eşleşiyor ===?
Maksimum

"Addr == null" kullanımı da tanımsız ile eşleşecektir. "Addr === null" kullandıysanız, yalnızca null ile eşleşir. İkinci eşleşme için === kullanılması, bir eşleşmeyi yalnızca boş dizge üzerinde zorlar.
Ed Downs

21

Kullanabilirsiniz if(addr && (addr = $.trim(addr)))

Bunun, addrkontrol yapılırken sadece yok saymak yerine herhangi bir dış beyaz boşluğu gerçekten kaldırmak gibi bir avantajı vardır .

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


2
Varsayalım ki, operasyon elbette beyaz alanı kaldırmak istiyor . :)
Madbreaks

1
addrCevabınız, örneğin bir tamsayı ile intialized ise yanlış bir pozitif döndürecektir .
Madbreaks

Daha fazla bilgi olmadan, null / undefined değilse var'ın her zaman bir dizge olduğunu varsayıyorum.
ThiefMaster

1
Op "bir değişkeni kontrol et ..." dedi ve örneği değişkenin bir dize olduğunu gösterdi, ancak bunun sadece fikri göstermek için bir örnek olduğunu varsayıyorum.
Madbreaks

5
isEmptyOrSpaces(str){
    return !str || str.trim() === '';
}

2
Mevcut cevapları tekrarlamaya ihtiyaç var mı? Veya önceki cevaplarla alakalı bir fark yaratan herhangi bir şeyi değiştirdiniz mi?
Nico Haase

5

Eski soru, ama bence daha basit bir cevabı hak ediyor.

Şunları yapabilirsiniz:

var addr = "  ";

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

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

}

1
Olması gerekmiyor addr && addr.trim()mu? Bir single ile &benim için işe yaramadı ama işe yarıyor &&.
markv12

4

Eşdeğer kendi yönteminizi oluşturabilirsiniz.

String.IsNullOrWhiteSpace(value)

function IsNullOrWhiteSpace( value) {

    if (value== null) return true;

    return value.replace(/\s/g, '').length == 0;
}

1
\sboşluklardan daha fazlasıyla eşleşiyor
Madbreaks

4

Beyaz boşluk kontrolü yapılırken c # yöntemi Unicode standardını kullanır. Beyaz boşluk, boşlukları, sekmeleri, satır başlarını ve diğer birçok yazdırılmayan karakter kodunu içerir. Yani şunları kullanmakta daha iyisiniz:

function isNullOrWhiteSpace(str){
    return str == null || str.replace(/\s/g, '').length < 1;
}

Op, amacın boşlukları değil boşlukları kontrol etmek olduğunu açıkça belirtir .
Madbreaks

5
Op "İhtiyacım olan şey şu C # yöntemi gibi bir şey: String.IsNullOrWhiteSpace (değer)" diyor. Ve sadece boşlukları kontrol ediyorsanız, fonksiyonunuzu isNullOrWhiteSpace olarak adlandırmayın, bunun yerine IsNullOrEmtpy olarak adlandırın.
Joao Leme

C # yöntemi , bir dizenin boş mu yoksa bir dizi boşluk mu olduğunu kontrol etmek için çalışır . Op "buna benzer" bir şey istedi, ama özellikle boşlukları kontrol etmek.
Madbreaks


0

Bunu dene

/**
  * 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;
}

Bunu böyle kullanabilirsin

isStringNullOrWhiteSpace('Your String');


0
function isEmptyOrSpaces(str){
    return str === null || str.match(/^[\s\n\r]*$/) !== null;
}

0

Bunu deneyebilirsiniz:

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.