Bagaimana saya bisa memeriksa apakah string berisi karakter & spasi, bukan hanya spasi?

134

Apa cara terbaik untuk memeriksa apakah string hanya berisi spasi putih?

String diizinkan untuk berisi karakter yang dikombinasikan dengan spasi putih, tetapi tidak hanya spasi putih.

patad
sumber

Jawaban:

293

Alih-alih memeriksa seluruh string untuk melihat apakah hanya ada spasi putih, cukup periksa untuk melihat apakah setidaknya ada satu karakter dari spasi non :

if (/\S/.test(myString)) {
    // string is not empty and not just whitespace
}
nickf
sumber
7
Hanya berhati-hatilah dengan myString menjadi nilai nol. Ini akan mengembalikan true: /\S/.test(null) == true
Dilshod Tadjibaev
6
banyak jawaban ini ada regex di dalamnya! Apakah ini berarti tidak ada cara asli untuk mendeteksi sesuatu di js? apakah tidak ada string. Apakah spasi atau sesuatu? Apakah tidak ada trim asli juga?
JonnyRaa
4
@JonnyLeeds Karena regex bahkan memiliki dukungan sintaks di js, orang dapat mengatakan itu sebenarnya lebih asli daripada metode utilitas yang dikirim;)
Ricardo van den Broek
38

Jawaban paling sederhana jika browser Anda mendukung trim()fungsi ini

if (myString && !myString.trim()) {
    //First condition to check if string is not empty
    //Second condition checks if string contains just whitespace
}
FullStack
sumber
Saat ini ketika IE 8 adalah RIP, ini adalah solusi yang paling bersih dan paling efisien berdasarkan kinerja implementasi asli. Dan itu berfungsi dengan benar dengan tab dan baris baru.
Alexander Abakumov
35
if (/^\s+$/.test(myString))
{
      //string contains only whitespace
}

ini memeriksa 1 atau lebih karakter spasi putih, jika Anda juga cocok dengan string kosong kemudian ganti +dengan *.

Paul Creasey
sumber
18

Nah, jika Anda menggunakan jQuery, itu lebih sederhana.

if ($.trim(val).length === 0){
   // string is invalid
} 
Siang hari
sumber
1
Bekerja untuk baris baru dan tab juga, sedangkan contoh regex di atas tidak karena mereka hanya mencari tidak adanya apa pun selain ruang putih. Meskipun, saya yakin seseorang dengan pengetahuan regex dapat membuat regex yang juga akan menyertakan tab / baris baru dalam pencarian.
Kate
tidak berfungsi ketika val diberi spasi, dalam kasus saya empat spasi.
user1451111
7

Cukup periksa string pada regex ini:

if(mystring.match(/^\s+$/) === null) {
    alert("String is good");
} else {
    alert("String contains only whitespace");
}
Ian Clelland
sumber
1
Cara saya membaca pertanyaan, adalah mengatakan bahwa / any / spasi putih diizinkan, selama string tidak / hanya / spasi putih. Diam tentang apa yang harus dilakukan jika string kosong, jadi mungkin jawaban nick masih lebih baik.
Ian Clelland
1
if (!myString.replace(/^\s+|\s+$/g,""))
  alert('string is only whitespace');
ramping
sumber
0

Ekspresi reguler yang akhirnya saya gunakan ketika saya ingin memberikan spasi di tengah-tengah string saya, tetapi tidak di awal atau akhir adalah ini:

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

atau

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

Jadi, saya tahu ini adalah pertanyaan lama, tetapi Anda dapat melakukan sesuatu seperti:

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

atau Anda dapat melakukan apa yang dikatakan dan digunakan nickf :

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

Saya telah menggunakan metode berikut untuk mendeteksi jika string hanya berisi spasi putih. Ini juga cocok dengan string kosong.

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

Ini bisa menjadi solusi cepat

return input < "\u0020" + 1;
9me
sumber
Itu hanya melakukan return input < " 1"; Yang hanya melakukan perbandingan alfabet. Selama input diurutkan lebih rendah dari "1", itu akan mengembalikan true. Contoh: return " asdfv34562345" < "\u0020" + 1;mengevaluasi ke true.
Derek Ziemba