Каков наилучший способ проверки пустой строки с помощью jquery-out-of-the-box?

229

Каков наилучший способ проверки пустой строки с помощью jquery-out-of-the-box, т.е. без плагинов? Я попробовал это .

Но это не сработало, по крайней мере, из коробки. Было бы неплохо использовать что-то встроенное.

Я не хотел бы повторяться

if (a == null || a=='')

везде, если некоторые if (isempty(a)) будут доступны.

Мартин
источник

Ответы:

556
if (!a) {
  // is emtpy
}

Чтобы игнорировать пробелы для строк:

if (!a.trim()) {
    // is empty or whitespace
}

Если вам нужна устаревшая поддержка (IE8-) для trim()использования $.trimили полизаполнения .

Дэвид Хеллсинг
источник
10
Пустая строка @CoffeeAddict является ложной в javascript, поэтому да, выражение оценивается как true, если a"" или любое другое ложное значение (null, false, undefined, 0, NaN).
Дэвид Хеллсинг
21
Если вам также нужно сопоставлять строки только с пробелами, это хорошая идея для использованияif (!$.trim(a))
Илари Каджасте,
3
По моему опыту, подавляющее большинство раз, когда вы хотите запустить этот тест, вы также хотите, чтобы он включал тестирование для пробелов. Поскольку это обычный случай, OP должен включить в свой ответ комментарий от @IlariKajaste
Bane
17
Принятый ответ потерпит неудачу, когда вы введете 0, однако он будет работать в течение 1, 2, 3, 4 и т. Д.
Стивен
5
Не if (!a.trim())немного ли опасно? Что если aне определено или равно нулю?
Тимо
27

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

if (a == null || a=='')

проверяет, является ли строка пустой или нулевой. Статья, которую вы связали с тестами, если строка полностью состоит из пробелов (или пуста).

Тест, который вы описали, можно заменить на:

if (!a)

Потому что в javascript, пустой строке и null, оба оцениваются как false в логическом контексте.

SpoonMeiser
источник
if(!a)Разве это не удастся для строки, состоящей, скажем, из 4 пробелов? ``
КНУ
@KNU Да, но вопрос касается пустой строки, а строка, состоящая из пробелов, не является пустой строкой. Посмотрите, что я написал о разнице между тем, что спросили, и тем, что делает связанный код
SpoonMeiser
Этот ответ неверен. Он обрабатывает '0' как пустую строку, а это не так.
Джон Хенкель
@JohnHenckel: он будет обрабатываться 0как пустая строка, но не так "0". Я полагаю, это то, что вы имели в виду? Вполне возможно, что это используется в ситуации, когда вы знаете, что aэто либо строка, либо ноль, но да. Что-то, о чем нужно знать.
SpoonMeiser
25

Основываясь на ответе Дэвида, я лично хотел бы сначала проверить данный объект, если это вообще строка. В противном случае вызов .trim()несуществующего объекта вызовет исключение:

function isEmpty(value) {
  return typeof value == 'string' && !value.trim() || typeof value == 'undefined' || value === null;
}

Использование:

isEmpty(undefined); // true
isEmpty(null); // true
isEmpty(''); // true
isEmpty('foo'); // false
isEmpty(1); // false
isEmpty(0); // false
Timo
источник
я проверяю с <br /> <p> </ p> из textarea, и он сказал, что не пустой, как следует
kreamik
5

Проверьте, являются ли данные пустой строкой (и игнорируйте пробелы) с помощью jQuery:

function isBlank( data ) {
    return ( $.trim(data).length == 0 );
}
Сьорд Линдерс
источник
5

Для проверки всех «пустых мест», таких как null, undefined, '', '', {}, [] .

var isEmpty = function(data) {
    if(typeof(data) === 'object'){
        if(JSON.stringify(data) === '{}' || JSON.stringify(data) === '[]'){
            return true;
        }else if(!data){
            return true;
        }
        return false;
    }else if(typeof(data) === 'string'){
        if(!data.trim()){
            return true;
        }
        return false;
    }else if(typeof(data) === 'undefined'){
        return true;
    }else{
        return false;
    }
}

Варианты использования и результаты.

console.log(isEmpty()); // true
console.log(isEmpty(null)); // true
console.log(isEmpty('')); // true
console.log(isEmpty('  ')); // true
console.log(isEmpty(undefined)); // true
console.log(isEmpty({})); // true
console.log(isEmpty([])); // true
console.log(isEmpty(0)); // false
console.log(isEmpty('Hey')); // false
Имран Ахмад
источник
3
if(!my_string){ 
// stuff 
}

и

if(my_string !== "")

если вы хотите принять ноль, но отклонить пустой

РЕДАКТИРОВАТЬ: woops, забыл ваше состояние, если оно пустое

Greg
источник
2

Попробуйте выполнить это в консоли браузера или в repl node.js.

var string = ' ';
string ? true : false;
//-> true

string = '';
string ? true : false;
//-> false

Поэтому для теста будет достаточно простой разветвляющейся конструкции.

if(string) {
    // string is not empty
}
Гарри Лав
источник
1
лучше сказать «!! string» вместо «string? true: false» или даже просто «string».
ス レ ッ ク ス
2

Поскольку вы также можете вводить числа и строки фиксированного типа, ответ должен быть:

function isBlank(value) {
  return $.trim(value);
}
Стивен
источник
Не должно ли быть так? return !!$.trim(value);
Wonsuc
-1

Попробуй это

if(!a || a.length === 0)
Атиф Азиз
источник
ФП конкретно заявил, что ищет альтернативу этому.
Уэйн
-4
if((a.trim()=="")||(a=="")||(a==null))
{
    //empty condition
}
else
{
    //working condition
}
Амарджит Чаани
источник
Если есть, nullто не a.trim()получится. Это плохой порядок, чтобы проверить вещи. И если вы измените порядок, ваш ответ не даст ничего, что не было предложено ранее.
Майк Скотти