Как проверить, является ли переменная пустой, пустой строкой или всеми пробелами в JavaScript?

102

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

У меня есть следующее, но оно не работает:

var addr;
addr = "  ";

if (!addr) {
    // pull error 
}

Если я сделаю следующее, это сработает:

if (addr) {

}​

Мне нужно что-то вроде метода C # String.IsNullOrWhiteSpace(value).

Нейт Пет
источник
3
Вы действительно имеете в виду has *any* empty spaces? Или ты имеешь в виду is all empty spaces?
Madbreaks
1
а как насчет undefined?
CodeToad 05

Ответы:

139

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

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

...тогда:

var addr = '  ';

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

* РЕДАКТИРОВАТЬ * Обратите внимание, что op конкретно указывает:

Мне нужно проверить, имеет ли var значение null, пустые места или просто пустые места .

Итак, хотя да, «пробел» включает в себя больше нуля, пробелов или пробелов, мой ответ предназначен для ответа на конкретный вопрос op. Это важно, потому что op может НЕ захватывать такие вещи, как, например, вкладки.

Madbreaks
источник
66
Пробелы также могут включать табуляции, другие виды пробелов и т. Д. Используйте их также /^\s*$/для перехвата.
Грант
2
@Grant Я намеренно НЕ делал этого, потому что op сказал: «Мне нужно проверить, имеет ли var значение null, есть ли какие-либо пустые места или, если на то пошло, просто пусто» .
Madbreaks
5
А как насчет использования test () вместо match ()? return str === null || (/ ^ * $ /). тест (стр);
Марио Левреро,
1
@MarioLevrero Мне это нравится! testтакже быстрее, насколько я помню.
Madbreaks
10
@Madbreaks: «Мне нужно что-то вроде этого метода C #: String.IsNullOrWhiteSpace». Этот метод рассматривает вкладки как пробелы.
подписка
25
if (addr == null || addr.trim() === ''){
  //...
}

nullСравнение также будет поймать undefined. Если вы falseтоже хотите пройти, используйте !addr. Для задом браузера свопа совместимости addr.trim()для $.trim(addr).

Рикардо Томази
источник
1
«Если вы хотите, чтобы также передавалось false, используйте! Addr» - не работает, если addrравно нулю.
Madbreaks 05
1
почему первый ==и второй совпадают ===?
Макс
Использование addr == null также будет соответствовать undefined. Если вы использовали "addr === null", он будет соответствовать только null. Использование === для второго совпадения приводит к совпадению только пустой строки.
Эд Даунс
19

Ты можешь использовать if(addr && (addr = $.trim(addr)))

Это имеет то преимущество, что фактически удаляет любые внешние пробелы addrвместо того, чтобы просто игнорировать их при выполнении проверки.

Ссылка: http://api.jquery.com/jQuery.trim/

ThiefMaster
источник
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

При проверке пробелов метод C # использует стандарт Unicode. Пробелы включают пробелы, табуляции, символы возврата каретки и многие другие непечатаемые коды символов. Итак, вам лучше использовать:

function isNullOrWhiteSpace(str){
    return str == null || str.replace(/\s/g, '').length < 1;
}
Жоао Леме
источник
Op явно заявляет, что цель - проверить наличие пробелов , а не пробелов.
Madbreaks
5
Оп говорит: «Мне нужно что-то вроде этого метода C #: String.IsNullOrWhiteSpace (value)». И если вы просто проверяете пробелы, не называйте свою функцию isNullOrWhiteSpace, а назовите ее IsNullOrEmtpy.
Joao Leme
Метод C # будет работать, чтобы проверить, была ли строка нулевой или серией пробелов. Оп хотел что-то «подобное», но специально для проверки на пробелы.
Madbreaks
4

Упрощенная версия вышеперечисленного: (отсюда: qaru.site/questions/435 / ... )

function isNullOrWhitespace( input ) {
  return !input || !input.trim();
}
Аарон Хоффман
источник
4

Старый вопрос, но я думаю, что он заслуживает более простого ответа.

Вы можете просто сделать:

var addr = "  ";

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

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

}
Sandre89
источник
1
Не должно быть addr && addr.trim()? С синглом &у меня не получилось, но сработало &&.
markv12
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
isEmptyOrSpaces(str){
    return str === null || str.trim().length>0;
}
Талинда Бандара
источник
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
хамедалави
источник