2014-09-17 9 views
8

szukam równowartość http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#isBlank(java.lang.CharSequence) Znalazłem kilka rozszerzeń 3rd party, ale jest tam jeden z pudełka z underscore.js: http://underscorejs.orgJak użyć pliku underscore.js, aby sprawdzić, czy ciąg znaków jest pusty?

+9

Co powiedzieliśmy na 'ciąg == null || string.trim(). length === 0'? Nie potrzebne biblioteki ... –

+0

@RobW: Szukałem jakiejś funkcji _.isBlank. Ale twoja odpowiedź jest właściwa. –

+0

@downvoter: powód, dla którego głosujesz w dół, byłby doceniony. –

Odpowiedz

10

Po porady @ muistooshort za tworzę wstawek i chciał go udostępnić:

_.mixin({ 
    isBlank: function(string) { 
     return (_.isUndefined(string) || _.isNull(string) || string.trim().length === 0) 
    } 
    }); 

> _("\t").isBlank() 
< true 

> _("qwerty").isBlank() 
< false 
4
function isBlank(str) { 
    return !!(str||'').match(/^\s*$/); 
} 

isBlank(null); // => true 
isBlank('');  // => true 
isBlank(' \t '); // => true 
isBlank(' foo '); // => false 
+0

Ciekawe, jak ta odpowiedź jest porównywana z odpowiedzią @Rob W? –

+0

@VenkatSudheerReddyAedama: bardzo podobne. Różnice w wydajności prawdopodobnie będą się różnić między tłumaczami, ale możesz ustawić stronę jsPerf, aby zobaczyć. – maerics

+0

Oczywiście istnieje wiele przypadków na rogu! = P – maerics

1

W underscore.js masz _.isEmpty (http://underscorejs.org/#isEmpty), ale sprawdza tylko, czy obiekt lub łańcuch mający postać macierzy ma długość 0.

Jeśli chcesz sprawdzić, czy zmienna jest ciągiem białych znaków, pustym łańcuchem lub wartością pustą (odpowiednikiem pola isBlank w języku Java), powinieneś utworzyć własną funkcję.

function isBlank(str) { 

    if (str === null || str.length === 0 || str === " ") return true; 
    return false; 

} 
+0

2. Nie działałoby dla przestrzeni tabulatora? –

+0

możesz sprawić, by działał z obszarami tabulacji, jeśli chcesz ... ale nie znajdziesz go w Underscore.js – taseenb

0

Można przedłużyć podkreślenia.

_.isBlank = function (str) { 
     return !!(str||'').match(/^\s*$/); 
    } 

Jeśli naprawdę nie chcesz, aby utworzyć funkcję jak taseenb wspomniano użytkowania isEmpty z obręczą. Chociaż to jest brzydkie!

_.isEmpty(' '.trim()); 

Chociaż oba te nie działają z kartami przestrzeniach

1

zastosowaniem wiążą się tworzyć natywne metody:

var isBlank=/./.test.bind(/(^$)|(^null$)|(^\s+$)/); // bind a regexp to test() 

_.map(["", " ", " x ", 0, null], isBlank); // test it against various data 
// == [true, true, false, false, true] // reflects java version output 
6
_.isEmpty(_.trim(string)); 

ten biegnie null lub pusty ciąg czek.

Zmieniano z aktualizacją z ehftwelve

+0

Nie otrzymasz tego, o co prosze OP, to zwróci 'false' dla napisu' "" '. –

+8

ok, więc rób to: '_.isEmpty (_. Trim (ciąg))' – ehftwelve

0

Oto mój urywek że użyłem podczas sprawdzania pustych strun.

_.isBlank = function (str) { 
     return (!str || /^\s*$/.test(str)); 
    } 

    var strs = ['a', 1, -1, 0, NaN, '', ' ', '\t', '\n', null, undefined]; 
    strs.forEach(function(s){ 
    console.log('is blank? ', s, _.isBlank(s)); 
    }); 

Uwaga: zero (0) będzie uznane za puste.

Powiązane problemy