web-dev-qa-db-de.com

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

Ich versuche zu überprüfen Sie, 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 RegExp mit Anführungszeichen versehen.

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

84
Abs

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 Tabulatoren gesucht.

211
CMS

Ihr regulärer Ausdruck passt so wie er ist zu nichts. Sie müssen die Anführungszeichen unbedingt entfernen - die Zeichen "/" Sind ausreichend.

/^\s+$/ Prüft, ob der String ALL Leerzeichen ist:

  • ^ Stimmt mit dem Anfang der Zeichenfolge überein.
  • \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.

19
Ian Clelland

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, ist hier eine einfache Implementierung von some 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 some durch ssome.

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

Verwenden Sie für die in Node:

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

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
CyborgHead