Überprüfen Sie, ob eine Zeichenfolge Leerzeichen enthält


95

Ich versuche zu überprüfen, ob eine Zeichenfolge Leerzeichen enthält . Ich habe diese Funktion gefunden, aber sie scheint nicht zu funktionieren:

function hasWhiteSpace(s) 
{
    var reWhiteSpace = new RegExp("/^\s+$/");

    // Check for white space
    if (reWhiteSpace.test(s)) {
        //alert("Please Check Your Fields For Spaces");
        return false;
    }

    return true;
}

Übrigens habe ich Zitate hinzugefügt RegExp.

Stimmt irgendetwas nicht? Gibt es etwas Besseres, das ich verwenden kann? Hoffentlich JQuery.


Ihre Logik ist rückwärts, wahr bedeutet falsch.
— Brian Schroth

2
Sie geben false zurück, wenn die Zeichenfolge Leerzeichen enthält. Ihre Logik ist rückwärts
— Christopher Francisco,

Dieser fragliche Regex sucht nach Mustern mit nur Leerzeichen in Zeichenfolgen, beginnt mit Leerzeichen, hat ein oder mehrere Leerzeichen und endet mit einem Leerzeichen.
— Priya Ranjan Singh

Antworten:


240

Sie können einfach die indexOf- Methode für die Eingabezeichenfolge verwenden:

function hasWhiteSpace(s) {
  return s.indexOf(' ') >= 0;
}

Oder Sie können die Testmethode auf einem einfachen RegEx verwenden:

function hasWhiteSpace(s) {
  return /\s/g.test(s);
}

Dadurch wird auch nach anderen Leerzeichen wie Tab gesucht.


17
Dies sucht nicht nach anderen Arten von Leerzeichen (z. B. \ t).
— Bernard Chen

3
Könnten Sie nicht auch s.indexOf (/ ^ \ s + $ /) eingeben?
— Zoidberg

2
Dies wird nicht von IE8 unterstützt (nur eine freundliche fyi ...)
— gloomy.penguin

@ CMS & @Bernard - Funktioniert nicht [s.indexOf ('') funktioniert]
— Shawn Rebelo

21

Ihre Regex passt zu nichts, so wie es ist. Sie müssen auf jeden Fall die Anführungszeichen entfernen - die"/" Zeichen sind ausreichend.

/^\s+$/prüft, ob der String ALL Whitespace ist:

  • ^ entspricht dem Anfang der Zeichenfolge.
  • \s+ bedeutet mindestens 1, möglicherweise mehr Leerzeichen.
  • $ stimmt mit dem Ende der Zeichenfolge überein.

Versuchen Sie, den regulären Ausdruck durch /\s/(und keine Anführungszeichen) zu ersetzen.


1

Diese Funktion sucht nach anderen Arten von Leerzeichen, nicht nur nach Leerzeichen (Tabulator, Wagenrücklauf usw.).

import some from 'lodash/fp/some'
const whitespaceCharacters = [' ', '  ',
  '\b', '\t', '\n', '\v', '\f', '\r', `\"`, `\'`, `\\`,
  '\u0008', '\u0009', '\u000A', '\u000B', '\u000C',
'\u000D', '\u0020','\u0022', '\u0027', '\u005C',
'\u00A0', '\u2028', '\u2029', '\uFEFF']
const hasWhitespace = char => some(
  w => char.indexOf(w) > -1,
  whitespaceCharacters
)

console.log(hasWhitespace('a')); // a, false
console.log(hasWhitespace(' ')); // space, true
console.log(hasWhitespace(' ')); // tab, true
console.log(hasWhitespace('\r')); // carriage return, true

Wenn Sie Lodash nicht verwenden möchten , finden Sie hier eine einfache someImplementierung mit 2 s:

const ssome = (predicate, list) =>
{
  const len = list.length;
  for(const i = 0; i<len; i++)
  {
    if(predicate(list[i]) === true) {
      return true;
    }
  }
  return false;
};

Dann ersetzen Sie einfach somemit ssome.

const hasWhitespace = char => some(
  w => char.indexOf(w) > -1,
  whitespaceCharacters
)

Verwenden Sie für diejenigen in Node:

const { some } = require('lodash/fp');

0

Hier ist meine vorgeschlagene Validierung:

var isValid = false;

// Check whether this entered value is numeric.
function checkNumeric() {
    var numericVal = document.getElementById("txt_numeric").value;

    if(isNaN(numericVal) || numericVal == "" || numericVal == null || numericVal.indexOf(' ') >= 0) {
        alert("Please, enter a numeric value!");
        isValid = false;
    } else {
        isValid = true;
    }
}

0

Ein einfacher Ansatz besteht darin, die Länge der ursprünglichen Zeichenfolge mit der Länge der Zeichenfolge zu vergleichen, um Leerzeichen durch nichts zu ersetzen. Beispielsweise:

function hasWhiteSpaces(string) {
    if (string.length == string.replace(" ", "").length) {return false}
    return true
}

0

Mit Ergänzungen der Sprache ist es viel einfacher, und Sie können von einer frühen Rückkehr profitieren:

// Use includes method on string
function hasWhiteSpace(s) {
  const whitespaceChars = [' ', '\t', '\n'];
  return whitespaceChars.some(char => s.includes(char));
}

// Use character comparison
function hasWhiteSpace(s) {
  const whitespaceChars = [' ', '\t', '\n'];
  return Array.from(s).some(char => whitespaceChars.includes(char));
}

const withSpace = "Hello World!";
const noSpace = "HelloWorld!";

console.log(hasWhiteSpace(withSpace));
console.log(hasWhiteSpace(noSpace));

console.log(hasWhiteSpace2(withSpace));
console.log(hasWhiteSpace2(noSpace));

Ich habe keinen Leistungsbenchmark durchgeführt, aber diese sollten schneller als Regex sein, aber für kleine Textausschnitte gibt es sowieso keinen so großen Unterschied.


0

Einige andere haben Antworten gepostet. Es gibt einige offensichtliche Probleme, wie die Rückkehr, falsewenn der Regex übergeben wird, und die Operatoren ^und $geben Start / Ende an, während die gesuchte Frage (beliebige) Leerzeichen enthält und nicht: nur Leerzeichen enthält (die der reguläre Ausdruck überprüft).

Außerdem ist das Problem nur ein Tippfehler.

Ändere das...

var reWhiteSpace = new RegExp("/^\s+$/");

Dazu ...

var reWhiteSpace = new RegExp("\\s+");

Wenn Sie einen regulären Ausdruck verwenden RegExp(), müssen Sie die folgenden zwei Schritte ausführen ...

  • Start- und Endklammern weglassen /.
  • Doppelter Escape-Code für alle Sequenzen, dh \\sanstelle von \susw.

Voll funktionsfähige Demo aus dem Quellcode ....

$(document).ready(function(e) { function hasWhiteSpace(s) {
        var reWhiteSpace = new RegExp("\\s+");
    
        // Check for white space
        if (reWhiteSpace.test(s)) {
            //alert("Please Check Your Fields For Spaces");
            return 'true';
        }
    
        return 'false';
    }
  
  $('#whitespace1').html(hasWhiteSpace(' '));
  $('#whitespace2').html(hasWhiteSpace('123'));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
" ": <span id="whitespace1"></span><br>
"123": <span id="whitespace2"></span>

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.