Jak sprawdzić, czy zmienna jest pustym ciągiem, pustym ciągiem lub wszystkimi białymi znakami w JavaScript?

102

Muszę sprawdzić, czy zmienna ma wartość null, czy ma wszystkie puste spacje lub jest po prostu pusta („”).

Mam następujące, ale nie działa:

var addr;
addr = "  ";

if (!addr) {
    // pull error 
}

Jeśli wykonam następujące czynności, zadziała:

if (addr) {

}​

To, czego potrzebuję, to coś w rodzaju metody C # String.IsNullOrWhiteSpace(value).

Nate Pet
źródło
3
Naprawdę masz na myśli has *any* empty spaces? Czy masz na myśli is all empty spaces?
Madbreaks
1
co z niezdefiniowanym?
CodeToad,

Odpowiedzi:

138

Rozwiązanie inne niż jQuery, które dokładniej naśladuje IsNullOrWhiteSpace, ale wykrywa tylko null, puste lub wszystkie spacje:

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

...następnie:

var addr = '  ';

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

* EDYTUJ * Pamiętaj, że op konkretnie stwierdza:

Muszę sprawdzić, czy zmienna ma wartość null, czy ma puste spacje lub po prostu jest pusta .

Tak więc, chociaż tak, „białe miejsce” obejmuje więcej niż null, spacje lub puste miejsce, moja odpowiedź ma na celu udzielenie odpowiedzi na konkretne pytanie op. Jest to ważne, ponieważ na przykład op może NIE chcieć przechwytywać rzeczy takich jak tabulatory.

Madbreaks
źródło
66
Białe spacje mogą również zawierać tabulatory, inne rodzaje spacji itp. Użyj, /^\s*$/aby je również złapać.
przyznaj
2
@Grant Celowo tego NIE zrobiłem, ponieważ op powiedział "Muszę sprawdzić, czy zmienna jest pusta lub ma puste spacje lub po prostu pusta" .
Madbreaks
5
A co z użyciem test () zamiast match ()? return str === null || (/ ^ * $ /). test (str);
Mario Levrero
1
@MarioLevrero Podoba mi się! testjest również szybszy, o czym pamiętam.
Madbreaks
10
@Madbreaks op stwierdził, że „Potrzebuję czegoś takiego jak ta metoda C #: String.IsNullOrWhiteSpace”. Ta metoda traktuje tabulatory jako białe znaki.
subskrybuje
25
if (addr == null || addr.trim() === ''){
  //...
}

nullPorównanie będzie również złapać undefined. Jeśli też chcesz falsezdać, użyj !addr. Aby uzyskać wsteczną zgodność przeglądarki, zamień addr.trim()na $.trim(addr).

Ricardo Tomasi
źródło
1
„Jeśli chcesz, aby fałsz też przeszedł, użyj! Addr” - zrywa, jeśli addrwynosi zero.
Madbreaks
1
dlaczego pierwsze ==i drugie pasują ===?
Maksymalnie
Użycie „addr == null” spowoduje również dopasowanie niezdefiniowane. Jeśli użyjesz "addr === null", dopasuje tylko null. Użycie === dla drugiego dopasowania wymusza dopasowanie tylko do pustego ciągu.
Ed Downs
19

Możesz użyć if(addr && (addr = $.trim(addr)))

Ma to tę zaletę, że faktycznie usuwa wszelkie zewnętrzne spacje, addrzamiast po prostu ignorować je podczas sprawdzania.

Źródła: http://api.jquery.com/jQuery.trim/

ThiefMaster
źródło
2
Zakładając oczywiście, że operator chce usunąć białe znaki. :)
Madbreaks
1
Twoja odpowiedź zwróci fałszywie dodatni wynik, jeśli addrzostanie zainicjowana np. Liczbą całkowitą.
Madbreaks
Bez dodatkowych informacji zakładam, że zmienna jest zawsze łańcuchem, jeśli nie ma wartości null / niezdefiniowanej.
ThiefMaster
1
Op powiedział „sprawdź, czy zmienna ...”, a jego przykład pokazał, że zmienna jest ciągiem znaków, ale przypuszczam, że to tylko przykład ilustrujący ideę.
Madbreaks
5
isEmptyOrSpaces(str){
    return !str || str.trim() === '';
}
Ali
źródło
2
Czy istnieje potrzeba powielania istniejących odpowiedzi? A może zmieniłeś coś w poprzednich odpowiedziach, co ma istotne znaczenie?
Nico Haase
4

Możesz utworzyć własną metodę Equivalent to

String.IsNullOrWhiteSpace(value)

function IsNullOrWhiteSpace( value) {

    if (value== null) return true;

    return value.replace(/\s/g, '').length == 0;
}
Shehzad
źródło
1
\spasuje do więcej niż tylko przestrzeni
Madbreaks
4

Podczas sprawdzania białych znaków metoda C # używa standardu Unicode. Białe znaki obejmują spacje, tabulatory, powrót karetki i wiele innych niedrukowalnych kodów znaków. Więc lepiej jest używać:

function isNullOrWhiteSpace(str){
    return str == null || str.replace(/\s/g, '').length < 1;
}
Joao Leme
źródło
Op wyraźnie stwierdza, że ​​celem jest sprawdzenie spacji , a nie białych znaków.
Madbreaks
5
Op mówi "To, czego potrzebuję, to coś takiego jak ta metoda C #: String.IsNullOrWhiteSpace (wartość)". A jeśli sprawdzasz tylko spacje, nie nazywaj swojej funkcji IsNullOrWhiteSpace, ale nadaj jej nazwę IsNullOrEmtpy.
Joao Leme,
Metoda C # działałaby, aby sprawdzić, czy ciąg ma wartość null, czy jest serią spacji. Op chciał czegoś „takiego”, ale żeby sprawdzić specjalnie spacje.
Madbreaks,
4

Stare pytanie, ale myślę, że zasługuje na prostszą odpowiedź.

Możesz po prostu zrobić:

var addr = "  ";

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

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

}
sandre89
źródło
1
Nie powinno być addr && addr.trim()? Z jednym &to nie zadziałało dla mnie, ale działa &&.
markv12
0

Wypróbuj to

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

Możesz tego używać w ten sposób

isStringNullOrWhiteSpace('Your String');
Rod Lauro Romarate
źródło
0
isEmptyOrSpaces(str){
    return str === null || str.trim().length>0;
}
Thalinda Bandara
źródło
0
function isEmptyOrSpaces(str){
    return str === null || str.match(/^[\s\n\r]*$/) !== null;
}
pico
źródło
0

Możesz spróbować tego:

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
hamedalavi
źródło