Jak mogę sprawdzić, czy ciąg zawiera znaki i spacje, a nie tylko białe spacje?


140

Jaki jest najlepszy sposób sprawdzenia, czy ciąg zawiera tylko białe znaki?

Łańcuch może zawierać znaki połączone ze spacjami , ale nie tylko białe znaki.

Odpowiedzi:


300

Zamiast sprawdzać cały ciąg, aby zobaczyć, czy jest tylko biała spacja, po prostu sprawdź, czy jest co najmniej jeden znak niebędący białą spacją:

if (/\S/.test(myString)) {
    // string is not empty and not just whitespace
}

7
Uważaj tylko, aby myString miało wartość null. Zwróci true: /\S/.test(null) == true
Dilshod Tadjibaev

6
wiele z tych odpowiedzi zawiera wyrażenia regularne! Czy to oznacza, że ​​nie ma natywnego sposobu wykrywania rzeczy w js? czy nie ma string.IsWhitespace czy coś? Czy nie ma też natywnego wykończenia?
JonnyRaa

5
@JonnyLeeds Ponieważ regex obsługuje nawet składnię w js, można powiedzieć, że jest bardziej natywny niż jakiekolwiek dostarczone metody narzędziowe;)
Ricardo van den Broek

44

Najprostsza odpowiedź, jeśli Twoja przeglądarka obsługuje tę trim()funkcję

if (myString && !myString.trim()) {
    //First condition to check if string is not empty
    //Second condition checks if string contains just whitespace
}

W dzisiejszych czasach, gdy IE 8 jest RIP, jest to najczystsze i najbardziej wydajne rozwiązanie oparte na natywnej implementacji. I działa poprawnie z zakładkami i nowymi liniami.
Alexander Abakumov

35
if (/^\s+$/.test(myString))
{
      //string contains only whitespace
}

ten sprawdza 1 lub więcej białych znaków, jeśli ją również dopasować pusty ciąg następnie zastąpić +z *.


18

Cóż, jeśli używasz jQuery, jest to prostsze.

if ($.trim(val).length === 0){
   // string is invalid
} 

1
Działa również dla nowej linii i tabulatora, podczas gdy powyższe przykłady wyrażeń regularnych nie, ponieważ szukają tylko braku czegokolwiek poza białymi znakami. Chociaż jestem pewien, że ktoś z pewną znajomością wyrażeń regularnych mógłby utworzyć wyrażenie regularne, które obejmowałoby również tabulację / nową linię w wyszukiwaniu.
Kate

nie działa, gdy val ma przypisane spacje, w moim przypadku cztery spacje.
user1451111

7

Po prostu porównaj ciąg z tym wyrażeniem regularnym:

if(mystring.match(/^\s+$/) === null) {
    alert("String is good");
} else {
    alert("String contains only whitespace");
}

1
Sposób, w jaki czytam to pytanie, mówi, że / dowolny / biały znak jest dozwolony, o ile łańcuch nie jest / tylko / biały znak. Nie mówi się, co zrobić, jeśli łańcuch jest pusty, więc może być tak, że odpowiedź nickfa jest jeszcze lepsza.
Ian Clelland

1
if (!myString.replace(/^\s+|\s+$/g,""))
  alert('string is only whitespace');

0

Wyrażenie regularne, którego użyłem, gdy chcę zezwolić na spacje w środku ciągu, ale nie na początku ani na końcu, było takie:

[\S]+(\s[\S]+)*

lub

^[\S]+(\s[\S]+)*$

Więc wiem, że to stare pytanie, ale możesz zrobić coś takiego:

if (/^\s+$/.test(myString)) {
    //string contains characters and white spaces
}

lub możesz zrobić to, co powiedział nickf i użyć:

if (/\S/.test(myString)) {
    // string is not empty and not just whitespace
}

0

Użyłem następującej metody, aby wykryć, czy ciąg zawiera tylko białe znaki. Dopasowuje również puste ciągi.

if (/^\s*$/.test(myStr)) {
  // the string contains only whitespace
}

0

To może być szybkie rozwiązanie

return input < "\u0020" + 1;

To tylko robienie, return input < " 1"; które jest po prostu porównywaniem alfabetycznym. Dopóki dane wejściowe są posortowane poniżej „1”, zwraca wartość „prawda”. Przykład: return " asdfv34562345" < "\u0020" + 1;zwraca wartość true.
Derek Ziemba
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.