Làm thế nào để phát hiện chuỗi chỉ chứa khoảng trắng?


82

Độ dài chuỗi chứa một khoảng trắng luôn bằng 1:

alert('My str length: ' + str.length);

Khoảng trắng là một ký tự, vì vậy:

str = "   ";
alert('My str length:' + str.length); // My str length: 3

Làm cách nào để phân biệt giữa chuỗi rỗng và chuỗi chỉ chứa khoảng trắng? Làm cách nào tôi có thể phát hiện một chuỗi chỉ chứa khoảng trắng?


1
Cắt nó và kiểm tra xem độ dài có bằng không. Bạn đang sử dụng jQuery?
Chetter Hummin

2
Loại bỏ tất cả khoảng trắng và xem độ dài chuỗi là 0? Hoặc sử dụng một biểu thức chính quy để phù hợp với chuỗi chỉ khoảng trắng ...
Felix Kling

Câu trả lời:


154

Để đạt được điều này, bạn có thể sử dụng Biểu thức chính quy để loại bỏ tất cả khoảng trắng trong chuỗi. Nếu độ dài của chuỗi kết quả là 0, thì bạn có thể chắc chắn rằng ban đầu chỉ chứa khoảng trắng. Thử cái này:

var str = "    ";
if (!str.replace(/\s/g, '').length) {
  console.log('string only contains whitespace (ie. spaces, tabs or line breaks)');
}


1
Chà, chuỗi chỉ chứa khoảng trắng.
dwerner

50

Giải pháp nhanh nhất sẽ là sử dụng test hàm nguyên mẫu regex () và tìm kiếm bất kỳ ký tự nào không phải là dấu cách hoặc ngắt dòng \S:

if (/\S/.test(str))
{
    // found something other than a space or line break
}

Trong trường hợp bạn có một chuỗi siêu dài, nó có thể tạo ra sự khác biệt đáng kể.


15

Tương tự như câu trả lời của Rory, với ECMA 5 giờ đây bạn có thể chỉ gọi str.trim().lengththay vì sử dụng biểu thức chính quy. Nếu giá trị kết quả là 0, bạn biết rằng bạn có một chuỗi chỉ chứa khoảng trắng.

if (!str.trim().length) {
  console.log('str is empty!');
}

Bạn có thể đọc thêm về trim ở đây .


2
Tôi thích câu trả lời này nhất. Rất bóng bẩy. 👍
GTS Joe

3
Đây là giải pháp thanh lịch nhất.
Gefilte Fish

10

Loại bỏ khoảng trắng khỏi chuỗi có thể được thực hiện bằng cách sử dụng String.trim().

Để kiểm tra xem một chuỗi là null hay không xác định, người ta có thể kiểm tra xem bản thân chuỗi đó có phải là falsey hay không, trong trường hợp đó, nó là null, undefined hoặc là một chuỗi rỗng. Việc kiểm tra đầu tiên này là cần thiết, vì việc cố gắng gọi các phương thức trên nullhoặc undefinedsẽ dẫn đến lỗi. Để kiểm tra xem nó chỉ chứa khoảng trắng hay không, người ta có thể kiểm tra xem chuỗi có phải là falsey không sau khi cắt, có nghĩa là tại thời điểm đó nó là một chuỗi rỗng.

if(!str || !str.trim()){
   //str is null, undefined, or contains only spaces
}

Nếu bạn chắc chắn rằng biến sẽ là một chuỗi, thì chỉ cần kiểm tra lần thứ hai.

if(!str.trim()){
   console.log("str is empty or contains only spaces");
}

8

Bạn có thể cắt bớt giá trị Chuỗi của mình bằng cách tạo hàm cắt cho Chuỗi của bạn.

String.prototype.trim = function () {
    return this.replace(/^\s*/, "").replace(/\s*$/, "");
}

bây giờ nó sẽ có sẵn cho mọi Chuỗi của bạn và bạn có thể sử dụng nó như

str.trim().length// Result will be 0

Bạn cũng có thể sử dụng phương pháp này để loại bỏ các khoảng trắng ở đầu và cuối của chuỗi, tức là

"  hello  ".trim(); // Result will be "hello"

4
Mở rộng nguyên mẫu của các đối tượng dựng sẵn là một ý tưởng tồi.
sbichenko

@exizt: điều gì sẽ xảy ra nếu nó chỉ được sử dụng bởi mã của riêng anh ấy?
Shehzad

0

Cắt giá trị Chuỗi của bạn bằng cách tạo một hàm cắt

var text = "  ";
if($.trim(text.length == 0){
  console.log("Text is empty");
}
else
{
  console.log("Text is not empty");
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.