Dizenin yalnızca boşluk değil, karakter ve boşluk içerip içermediğini nasıl kontrol edebilirim?


134

Bir dizenin yalnızca boşluk içerip içermediğini kontrol etmenin en iyi yolu nedir?

Dizenin boşluklarla birleştirilmiş karakterler içermesine izin verilir , ancak yalnızca boşluk kullanılamaz.

Yanıtlar:


294

Yalnızca boşluk olup olmadığını görmek için dizenin tamamını kontrol etmek yerine, boşluk olmayan en az bir karakter olup olmadığını kontrol edin :

if (/\S/.test(myString)) {
    // string is not empty and not just whitespace
}

7
Sadece myString'in boş değer olmasına dikkat edin. Doğru dönecek: /\S/.test(null) == true
Dilshod Tadjibaev

6
bu yanıtların çoğunun içinde normal ifade var! Bu, js'de bir şeyi algılamanın doğal bir yolu olmadığı anlamına mı geliyor? string.IsWhitespace veya başka bir şey yok mu? Doğal süsleme de yok mu?
JonnyRaa

4
@JonnyLeeds Regex'in js'de sözdizimi desteği bile olduğundan, aslında gönderilen tüm yardımcı program yöntemlerinden daha doğal olduğu söylenebilir;)
Ricardo van den Broek

38

Tarayıcınız trim()işlevi destekliyorsa en basit cevap

if (myString && !myString.trim()) {
    //First condition to check if string is not empty
    //Second condition checks if string contains just whitespace
}

IE 8'in RIP olduğu günümüzde, bu, yerel uygulamaya dayanan performans açısından en temiz ve en verimli çözümdür. Ve sekmelerle ve yeni satırlarla doğru şekilde çalışır.
Alexander Abakumov

35
if (/^\s+$/.test(myString))
{
      //string contains only whitespace
}

1 veya daha fazla boşluk karakterleri için bu kontroller, eğer o da o zaman yerine boş bir dize maç için +birlikte *.


18

JQuery kullanıyorsanız, daha basittir.

if ($.trim(val).length === 0){
   // string is invalid
} 

1
Satırsonu ve sekme için de işe yarıyor, oysa yukarıdaki normal ifade örnekleri yalnızca boşluktan başka bir şeyin yokluğunu aradıkları için değil. Yine de, biraz normal ifade bilgisine sahip birinin aramada sekme / satırsonu da içerecek bir normal ifade oluşturabileceğinden eminim.
Kate

val boşluklar atandığında çalışmaz, benim durumumda dört boşluk.
user1451111

7

Dizeyi bu normal ifadeyle karşılaştırmanız yeterlidir:

if(mystring.match(/^\s+$/) === null) {
    alert("String is good");
} else {
    alert("String contains only whitespace");
}

1
Soruyu okuma şeklim, dizge / only / whitespace olmadığı sürece / any / whitespace'e izin verildiğini söylüyor. Dizge boşsa ne yapılacağı konusunda sessizdir, bu yüzden nickf'in cevabı daha iyi olabilir.
Ian Clelland

1
if (!myString.replace(/^\s+|\s+$/g,""))
  alert('string is only whitespace');

0

Dizimin ortasında boşluklara izin vermek, ancak başında veya sonunda olmayan boşluklara izin vermek istediğimde kullandığım normal ifade şuydu:

[\S]+(\s[\S]+)*

veya

^[\S]+(\s[\S]+)*$

Biliyorum bu eski bir soru, ama şöyle bir şey yapabilirsiniz:

if (/^\s+$/.test(myString)) {
    //string contains characters and white spaces
}

veya nickf'in dediğini yapıp şunu kullanabilirsiniz:

if (/\S/.test(myString)) {
    // string is not empty and not just whitespace
}

0

Bir dizenin yalnızca boşluk içerip içermediğini tespit etmek için aşağıdaki yöntemi kullandım. Ayrıca boş dizelerle eşleşir.

if (/^\s*$/.test(myStr)) {
  // the string contains only whitespace
}

0

Bu hızlı bir çözüm olabilir

return input < "\u0020" + 1;

Bu sadece bunu yapmak return input < " 1"; , sadece alfabetik karşılaştırma yapmaktır. Giriş "1" den daha küçük sıralandığı sürece, doğru olarak dönecektir. Örnek: return " asdfv34562345" < "\u0020" + 1;true olarak değerlendirilir.
Derek Ziemba
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.