Wie überprüfe ich, ob eine Variable null oder eine leere Zeichenfolge oder alle Leerzeichen in JavaScript ist?

95

Ich muss überprüfen, ob eine Variable null ist oder alle Leerzeichen enthält oder nur leer ist ("").

Ich habe folgendes, aber es funktioniert nicht:

var addr;
addr = "  ";

if (!addr) {
    // pull error 
}

Wenn ich Folgendes mache, funktioniert es:

if (addr) {

}​

Was ich brauche, ist so etwas wie die C # -Methode String.IsNullOrWhiteSpace(value).

Nate Pet
quelle
3
Meinst du wirklich has *any* empty spaces? Oder meinst du is all empty spaces?
Madbreaks
1
was ist mit undefiniert?
CodeToad

Antworten:

134

Eine Nicht-jQuery-Lösung, die genauer nachahmt IsNullOrWhiteSpace, aber nur Null-, Leer- oder Leerzeichen erkennt:

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

...dann:

var addr = '  ';

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

* EDIT * Bitte beachten Sie, dass in op ausdrücklich Folgendes angegeben ist:

Ich muss überprüfen, ob eine Variable null ist oder Leerzeichen enthält oder nur leer ist .

Während ja, "Leerzeichen" mehr als Null, Leerzeichen oder Leerzeichen umfasst, soll meine Antwort die spezifische Frage von op beantworten. Dies ist wichtig, da op möglicherweise NICHT beispielsweise Tabs abfangen möchte.

Madbreaks
quelle
62
Leerzeichen können auch Tabulatoren, andere Arten von Leerzeichen usw. enthalten. Verwenden Sie diese Option, um diese ebenfalls abzufangen /^\s*$/.
gewähren
2
@Grant Ich habe das absichtlich NICHT getan, weil op sagte "Ich muss überprüfen, ob eine Variable null ist oder Leerzeichen hat oder nur leer ist" .
Madbreaks
4
Was ist mit test () anstelle von match ()? return str === null || (/ ^ * $ /). test (str);
Mario Levrero
1
@MarioLevrero Ich mag es! testist auch schneller, wie ich mich erinnere.
Madbreaks
9
@Madbreaks the op sagte: "Was ich brauche, ist so etwas wie diese C # -Methode: String.IsNullOrWhiteSpace". Diese Methode behandelt Tabulatoren als Leerzeichen.
Subsci
24
if (addr == null || addr.trim() === ''){
  //...
}

Ein nullVergleich wird auch fangen undefined. Wenn Sie auch bestehen möchten false, verwenden Sie !addr. Für die Abwärtsbrowserkompatibilität tauschen Sie addr.trim()gegen $.trim(addr).

Ricardo Tomasi
quelle
1
"Wenn auch false übergeben werden soll, verwenden Sie! Addr" - bricht zusammen, wenn addrNull ist.
Madbreaks
19

Sie können verwenden if(addr && (addr = $.trim(addr)))

Dies hat den Vorteil, dass äußere Leerzeichen tatsächlich entfernt werden, addranstatt sie bei der Überprüfung einfach zu ignorieren.

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

DiebMaster
quelle
2
Vorausgesetzt natürlich, die Operation möchte das Leerzeichen entfernen. :)
Madbreaks
1
Ihre Antwort gibt ein falsches Positiv zurück, wenn sie addrbeispielsweise mit einer Ganzzahl initialisiert ist.
Madbreaks
Ohne weitere Informationen gehe ich davon aus, dass die Variable immer eine Zeichenfolge ist, wenn sie nicht null / undefiniert ist.
ThiefMaster
1
Op sagte "überprüfe ob eine Variable ..." und sein Beispiel zeigte, dass diese Variable eine Zeichenfolge ist, aber ich würde annehmen, dass dies nur ein Beispiel ist, um die Idee zu demonstrieren.
Madbreaks
5
isEmptyOrSpaces(str){
    return !str || str.trim() === '';
}
Ali
quelle
Müssen vorhandene Antworten dupliziert werden? Oder haben Sie etwas an den vorherigen Antworten geändert, was einen relevanten Unterschied macht?
Nico Haase
4

Sie können Ihre eigene Methode erstellen

String.IsNullOrWhiteSpace(value)

function IsNullOrWhiteSpace( value) {

    if (value== null) return true;

    return value.replace(/\s/g, '').length == 0;
}
Shehzad
quelle
1
\spasst mehr als nur Leerzeichen
Madbreaks
4

Alte Frage, aber ich denke, sie verdient eine einfachere Antwort.

Sie können einfach tun:

var addr = "  ";

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

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

}
sandre89
quelle
1
Sollte es nicht sein addr && addr.trim()? Mit einer Single hat &es bei mir nicht funktioniert, aber mit &&.
Markv12
@ markv12 behoben, danke
sandre89
3

Bei der Suche nach Leerzeichen verwendet die c # -Methode den Unicode-Standard. Leerzeichen umfassen Leerzeichen, Tabulatoren, Wagenrückläufe und viele andere nicht druckbare Zeichencodes. Sie können also besser Folgendes verwenden:

function isNullOrWhiteSpace(str){
    return str == null || str.replace(/\s/g, '').length < 1;
}
Joao Leme
quelle
Op gibt ausdrücklich an, dass das Ziel darin besteht, nach Leerzeichen und nicht nach Leerzeichen zu suchen.
Madbreaks
5
Op sagt "Was ich brauche, ist so etwas wie diese C # -Methode: String.IsNullOrWhiteSpace (Wert)". Und wenn Sie nur nach Leerzeichen suchen, nennen Sie Ihre Funktion nicht NullOrWhiteSpace, sondern IsNullOrEmtpy.
Joao Leme
Die C # -Methode würde prüfen, ob eine Zeichenfolge null oder eine Reihe von Leerzeichen ist. Op wollte so etwas "so", aber speziell nach Leerzeichen suchen.
Madbreaks
3

Vereinfachte Version des oben genannten: (von hier: https://stackoverflow.com/a/32800728/47226 )

function isNullOrWhitespace( input ) {
  return !input || !input.trim();
}
Aaron Hoffman
quelle
0

Probieren Sie es aus

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

Sie können es so verwenden

isStringNullOrWhiteSpace('Your String');
Rod lauro Romarate
quelle
0
isEmptyOrSpaces(str){
    return str === null || str.trim().length>0;
}
Thalinda Bandara
quelle
0
function isEmptyOrSpaces(str){
    return str === null || str.match(/^[\s\n\r]*$/) !== null;
}
Pico
quelle
0

Sie können dies versuchen:

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
quelle