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.

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
}

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
}

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 *.


18

Nah, jika Anda menggunakan jQuery, itu lebih sederhana.

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

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");
}

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');

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
}

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
}

0

Ini bisa menjadi solusi cepat

return input < "\u0020" + 1;

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.