Як перевірити, чи є змінна нульовим чи порожнім рядком або всі пробіли в JavaScript?


97

Мені потрібно перевірити, чи є змінна нульовою чи має всі порожні пробіли, чи просто порожня ("").

У мене є таке, але це не працює:

var addr;
addr = "  ";

if (!addr) {
    // pull error 
}

Якщо я роблю наступне, це працює:

if (addr) {

}​

Мені потрібно щось на зразок методу C # String.IsNullOrWhiteSpace(value).


3
Ви насправді маєте на увазі has *any* empty spaces? Або ти маєш на увазі is all empty spaces?
Madbreaks

1
а як щодо невизначеного?
CodeToad

Відповіді:


135

Рішення не-jQuery, яке більш точно імітує IsNullOrWhiteSpace, але виявляє лише нульові, порожні або всі пробіли:

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

...тоді:

var addr = '  ';

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

* РЕДАГУВАТИ * Зверніть увагу на те, що в ОП зазначено:

Мені потрібно перевірити, чи є значення var нульовим чи містить порожні пробіли, чи просто порожнє .

Отже, хоча так, "пробіл" охоплює більше, ніж нуль, пробіли чи порожні місця, але моя відповідь призначена для відповіді на конкретне запитання оператора. Це важливо, оскільки оператор, можливо, НЕ хоче захоплювати такі речі, як вкладки, наприклад.


63
Пробіл може також включати вкладки, інші пробіли тощо. Використовуйте і /^\s*$/для їх лову.
надання

2
@Grant Я цілеспрямовано НЕ робив цього, тому що op сказав: "Мені потрібно перевірити, чи не є значення var нульовим, чи не містить порожніх пробілів, чи просто порожнім" .
Madbreaks

5
А як щодо використання test () замість match ()? повернути str === нуль || (/ ^ * $ /). тест (str);
Маріо Левреро

1
@MarioLevrero Мені це подобається! testтакож швидше, наскільки я пам’ятаю.
Madbreaks

10
@Madbreaks в операторі зазначено: "Що мені потрібно, це щось на зразок цього методу C #: String.IsNullOrWhiteSpace". Цей метод розглядає вкладки як пробіли.
subsci

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

nullПорівняння також буде зловити undefined. Якщо ви теж хочете falseпройти, використовуйте !addr. Для зворотної сумісності браузера обмін addr.trim()для $.trim(addr).


1
"Якщо ви також хочете, щоб false також передано, використовуйте! Addr" - розбивається, якщо addrдорівнює нулю.
Madbreaks

чому перший ==і другий збігаються ===?
Макс.

19

Можна використовувати if(addr && (addr = $.trim(addr)))

Це має перевагу в тому, що насправді видаляє будь-який зовнішній пробіл, addrа не просто ігнорує його під час виконання перевірки.

Посилання: http://api.jquery.com/jQuery.trim/


2
Припускаючи, звичайно, оператор хоче видалити пробіли. :)
Madbreaks

1
Ваша відповідь поверне помилково позитивне, якщо addrйого ініціалізувати, наприклад, цілим числом.
Madbreaks

Без додаткової інформації я вважаю, що var завжди є рядком, якщо він не є null / undefined.
ThiefMaster

1
Оп сказав "перевірити, чи змінна ...", і його приклад показав, що ця змінна є рядком, але я б припустив, що це лише приклад для демонстрації ідеї.
Madbreaks

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

2
Чи потрібно дублювати існуючі відповіді? Або ви щось змінили на попередні відповіді, що суттєво впливає?
Ніко Хаасе,

4

Ви можете створити власний метод, еквівалентний

String.IsNullOrWhiteSpace(value)

function IsNullOrWhiteSpace( value) {

    if (value== null) return true;

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

1
\sвідповідає не просто пробілам
Madbreaks

4

Старе питання, але я думаю, що воно заслуговує на більш просту відповідь.

Ви можете просто зробити:

var addr = "  ";

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

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

}

1
Чи не повинно бути addr && addr.trim()? З одним синглом &у мене це не вийшло, але з &&.
markv12

3

При перевірці пробілів метод c # використовує стандарт Unicode. Пробіли включають пробіли, вкладки, повернення каретки та багато інших кодів символів, що не друкуються. Тож вам краще використовувати:

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

Op прямо вказує, що мета полягає в тому, щоб перевірити наявність пробілів , а не пробілів.
Madbreaks

5
Op каже: "Що мені потрібно, це щось на зразок цього методу C #: String.IsNullOrWhiteSpace (значення)". І якщо ви просто перевіряєте пробіли, не називайте свою функцію isNullOrWhiteSpace, а натомість називайте її IsNullOrEmtpy.
Joao Leme

Метод C # буде працювати, щоб перевірити, чи є рядок нульовим або ряд пробілів. Op хотів щось подібне, але перевірити спеціально на пробіли.
Madbreaks


0

Спробуйте це

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

Ви можете використовувати його так

isStringNullOrWhiteSpace('Your String');


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

0

Ви можете спробувати це:

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.