Làm thế nào để kiểm tra xem một biến là chuỗi rỗng hay chuỗi rỗng hoặc tất cả khoảng trắng trong JavaScript?


97

Tôi cần kiểm tra xem một biến là null hay có tất cả các khoảng trống hay chỉ trống ("").

Tôi có những thứ sau, nhưng nó không hoạt động:

var addr;
addr = "  ";

if (!addr) {
    // pull error 
}

Nếu tôi làm như sau, nó hoạt động:

if (addr) {

}​

Những gì tôi cần là một cái gì đó giống như phương pháp C # String.IsNullOrWhiteSpace(value).


3
Bạn có thực sự muốn has *any* empty spaces? Hay ý bạn là is all empty spacesgì?
Madbreaks

1
những gì về không xác định?
CodeToad vào

Câu trả lời:


135

Một giải pháp không phải jQuery bắt chước gần giống hơn IsNullOrWhiteSpace, nhưng chỉ để phát hiện rỗng, trống hoặc tất cả các khoảng trắng:

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

...sau đó:

var addr = '  ';

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

* CHỈNH SỬA * Xin lưu ý rằng op nói rõ:

Tôi cần kiểm tra xem liệu var là null hay có bất kỳ khoảng trống nào hoặc đối với vấn đề đó chỉ là trống .

Vì vậy, trong khi có, "khoảng trắng" bao gồm nhiều hơn null, dấu cách hoặc khoảng trống câu trả lời của tôi nhằm trả lời câu hỏi cụ thể của op. Điều này rất quan trọng vì op có thể KHÔNG muốn bắt những thứ như tab chẳng hạn.


63
Khoảng trắng cũng có thể bao gồm các tab, các loại khoảng trắng khác, v.v. Sử dụng /^\s*$/để bắt những khoảng trắng đó.
cấp

2
@Grant Tôi cố tình KHÔNG làm điều đó vì op nói "Tôi cần kiểm tra xem liệu var là null hay có bất kỳ khoảng trống nào hoặc đối với vấn đề đó chỉ là trống" .
Madbreaks

5
Điều gì về việc sử dụng test () thay vì match ()? trả về str === null || (/ ^ * $ /). test (str);
Mario Levrero

1
@MarioLevrero Tôi thích nó! testcũng nhanh hơn như tôi nhớ.
Madbreaks

10
@Madbreak op nêu rõ "Những gì tôi cần là một cái gì đó giống như phương thức C # này: String.IsNullOrWhiteSpace". Phương thức đó coi các tab là khoảng trắng.
subsci

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

Một nullso sánh cũng sẽ bắt được undefined. Nếu bạn cũng muốn falsevượt qua, hãy sử dụng !addr. Để trao đổi khả năng tương thích của trình duyệt ngược addr.trim()cho $.trim(addr).


1
"Nếu bạn cũng muốn false, hãy sử dụng! Addr" - chia nhỏ nếu addrlà 0.
Madbreaks

tại sao cái đầu tiên ==và cái thứ hai khớp với nhau ===?
Tối đa

19

Bạn có thể dùng if(addr && (addr = $.trim(addr)))

Điều này có lợi thế là thực sự loại bỏ bất kỳ khoảng trắng bên ngoài nào addrthay vì chỉ bỏ qua nó khi thực hiện kiểm tra.

Tham khảo: http://api.jquery.com/jQuery.trim/


2
Giả sử, tất nhiên op muốn loại bỏ khoảng trắng. :)
Madbreaks

1
Câu trả lời của bạn sẽ trả về một số dương sai nếu addrlà số nguyên.
Madbreaks

Nếu không có thêm thông tin, tôi giả sử var luôn là một chuỗi nếu nó không phải là null / undefined.
ThiefMaster

1
Op đã nói "kiểm tra xem một biến ..." và ví dụ của anh ấy cho thấy biến đó là một chuỗi, nhưng tôi giả định rằng đó chỉ là một ví dụ để chứng minh ý tưởng.
Madbreaks

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

2
Có cần phải sao chép các câu trả lời hiện có không? Hay bạn đã thay đổi bất cứ điều gì đối với các câu trả lời trước đó tạo ra sự khác biệt có liên quan?
Nico Haase

4

Bạn có thể tạo phương pháp của riêng mình Tương đương với

String.IsNullOrWhiteSpace(value)

function IsNullOrWhiteSpace( value) {

    if (value== null) return true;

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

1
\sphù hợp với nhiều hơn chỉ là không gian
Madbreaks

4

Câu hỏi cũ, nhưng tôi nghĩ nó xứng đáng có một câu trả lời đơn giản hơn.

Bạn chỉ cần làm:

var addr = "  ";

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

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

}

1
Có nên không addr && addr.trim()? Với một đĩa đơn, &nó không hoạt động với tôi nhưng nó lại có &&.
markv

3

Khi kiểm tra khoảng trắng, phương pháp c # sử dụng tiêu chuẩn Unicode. Khoảng trắng bao gồm dấu cách, tab, dấu xuống dòng và nhiều mã ký tự không in khác. Vì vậy, bạn tốt hơn nên sử dụng:

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

Op tuyên bố rõ ràng mục tiêu là kiểm tra khoảng trắng , không phải khoảng trắng.
Madbreaks

5
Op nói "Những gì tôi cần là một cái gì đó giống như phương thức C # này: String.IsNullOrWhiteSpace (giá trị)". Và nếu bạn chỉ kiểm tra khoảng trắng, đừng đặt tên cho hàm của bạn là isNullOrWhiteSpace mà thay vào đó đặt tên là IsNullOrEmtpy.
Joao Leme

Phương thức C # sẽ hoạt động để kiểm tra xem một chuỗi là rỗng hay một chuỗi khoảng trắng. Op muốn một cái gì đó "giống như" như vậy, nhưng để kiểm tra cụ thể cho khoảng trắng.
Madbreaks


0

Thử thứ này đi

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

Bạn có thể sử dụng nó như thế này

isStringNullOrWhiteSpace('Your String');


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

0

Bạn có thể thử điều này:

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