Come verificare se una variabile è nulla o una stringa vuota o tutti gli spazi bianchi in JavaScript?


97

Devo controllare se una variabile è nulla o ha tutti gli spazi vuoti o è solo vuota ("").

Ho il seguente, ma non funziona:

var addr;
addr = "  ";

if (!addr) {
    // pull error 
}

Se faccio quanto segue, funziona:

if (addr) {

}​

Quello di cui ho bisogno è qualcosa come il metodo C # String.IsNullOrWhiteSpace(value).


3
Intendi davvero has *any* empty spaces? O intendi is all empty spaces?
Madbreaks

1
che dire di indefinito?
CodeToad

Risposte:


135

Una soluzione non jQuery che imita più da vicino IsNullOrWhiteSpace, ma per rilevare solo null, vuoti o tutti gli spazi:

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

...poi:

var addr = '  ';

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

* EDIT * Si prega di notare che op afferma specificamente:

Devo controllare se una var è nulla o ha spazi vuoti o se è per questo solo vuoto .

Quindi, mentre sì, lo "spazio bianco" comprende più di null, spazi o spazi vuoti la mia risposta ha lo scopo di rispondere alla domanda specifica dell'operatore. Questo è importante perché op potrebbe NON voler catturare cose come le schede, per esempio.


63
Gli spazi bianchi possono anche includere tabulazioni, altri tipi di spazi, ecc. Utilizzare /^\s*$/per catturare anche quelli.
concedere il

2
@Grant NON l'ho fatto intenzionalmente perché op ha detto "Devo controllare se una var è nulla o ha spazi vuoti o per quella materia solo vuota" .
Madbreaks

5
Che ne dici di usare test () invece di match ()? return str === null || (/ ^ * $ /). test (str);
Mario Levrero

1
@MarioLevrero mi piace! testè anche più veloce come ricordo.
Madbreaks

10
@ Madbreaks l'operazione ha dichiarato "Quello di cui ho bisogno è qualcosa di simile a questo metodo C #: String.IsNullOrWhiteSpace". Questo metodo tratta le tabulazioni come spazi bianchi.
subentra il

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

Anche un nullconfronto catturerà undefined. Se vuoi falsepassare anche tu , usa !addr. Per la compatibilità con il browser all'indietro, scambia addr.trim()con $.trim(addr).


1
"Se vuoi che anche false passi, usa! Addr" - si scompone se addrè zero.
Madbreaks

perché la prima ==e la seconda corrispondenza ===?
Max

19

Puoi usare if(addr && (addr = $.trim(addr)))

Questo ha il vantaggio di rimuovere effettivamente qualsiasi spazio bianco esterno addrinvece di ignorarlo quando si esegue il controllo.

Riferimento: http://api.jquery.com/jQuery.trim/


2
Supponendo, ovviamente, che l'operazione voglia rimuovere gli spazi. :)
Madbreaks

1
La tua risposta restituirà un falso positivo se addrè inizializzata con, ad esempio, un numero intero.
Madbreaks

Senza ulteriori informazioni presumo che la var sia sempre una stringa se non è null / undefined.
ThiefMaster

1
Op ha detto "controlla se una variabile ...", e il suo esempio mostrava che la variabile era una stringa, ma presumo che sia solo un esempio per dimostrare l'idea.
Madbreaks

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

2
È necessario duplicare le risposte esistenti? O hai cambiato qualcosa rispetto alle risposte precedenti che fa una differenza rilevante?
Nico Haase

4

Puoi creare il tuo metodo Equivalente a

String.IsNullOrWhiteSpace(value)

function IsNullOrWhiteSpace( value) {

    if (value== null) return true;

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

1
\spartite più che semplici spazi
Madbreaks

4

Vecchia domanda, ma credo che meriti una risposta più semplice.

Puoi semplicemente fare:

var addr = "  ";

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

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

}

1
Non dovrebbe essere addr && addr.trim()? Con un singolo &non ha funzionato per me, ma con &&.
markv12

3

Quando si verifica lo spazio vuoto, il metodo c # utilizza lo standard Unicode. Lo spazio vuoto include spazi, tabulazioni, ritorni a capo e molti altri codici di caratteri non stampabili. Quindi è meglio usare:

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

Op afferma esplicitamente che l'obiettivo è controllare gli spazi , non gli spazi bianchi.
Madbreaks

5
Op dice "Quello che mi serve è qualcosa di simile a questo metodo C #: String.IsNullOrWhiteSpace (value)". E se stai solo controllando gli spazi, non nominare la tua funzione isNullOrWhiteSpace ma chiamarla invece IsNullOrEmtpy.
Joao Leme

Il metodo C # potrebbe funzionare per verificare se una stringa era null o una serie di spazi. Op voleva qualcosa di "simile", ma per controllare specificamente gli spazi.
Madbreaks


0

Prova questo

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

Puoi usarlo in questo modo

isStringNullOrWhiteSpace('Your String');


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

0

Puoi provare questo:

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.