javascript - Überprüfen, ob ein String Leerzeichen enthält
Ich versuche zu überprüfen, ob ein String 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 Anführungszeichen zu RegExp hinzugefügt.
Gibt es ein Problem? Gibt es etwas Besseres, das ich verwenden kann? Hoffentlich JQuery.
Antwort #1
Sie können einfach die indexOf-Methode auf der Eingabezeichenkette verwenden:
function hasWhiteSpace(s) {
return s.indexOf(' ') >= 0;
}
Oder Sie können die Testmethode an einem einfachen RegEx verwenden:
function hasWhiteSpace(s) {
return /\s/g.test(s);
}
Dies wird auch nach anderen Leerzeichenzeichen wie Tab überprüfen.
Antwort #2
Ihr Regex wird so, wie er ist, nichts übereinstimmen. Sie müssen auf jeden Fall die Anführungszeichen entfernen - die "/"-Zeichen sind ausreichend.
/^\s+$/ überprüft, ob der String ALLE Leerzeichen enthält:
^entspricht dem Anfang des Strings.\s+bedeutet mindestens 1, möglicherweise mehr, Leerzeichen.$entspricht dem Ende des Strings.
Versuchen Sie, den Regex durch /\s/ zu ersetzen (ohne Anführungszeichen)
Antwort #3
Die test-Methode ist der beste Weg. Die Zeichenklasse \s überprüft auf jedes Leerzeichenzeichen einschließlich Leerzeichen, Tabulator, Wagenrücklauf und Seitenvorschub.
Das globale Flag ist nicht notwendig, da wir nur nach einem einzelnen Treffer suchen. Regex-Literale laufen schneller als ihre Konstruktor-Äquivalente, weil sie vom Laufzeitsystem besser optimiert werden.
function hasWhiteSpace(s) {
return (/\s/).test(s);
}
console.log(hasWhiteSpace("Hello World!"));
console.log(hasWhiteSpace("HelloWorld!"));
console.time('hasWhiteSpace');
for (let i = 0; i < 1_000_000; i++) {
hasWhiteSpace("Some text here");
}
console.timeEnd('hasWhiteSpace');Wenn Sie nur mit bestimmten Leerzeichenzeichen arbeiten, können Sie Array-Methoden wie some nutzen, die bei der ersten erfolgreichen Übereinstimmung zurückgeben, aber sie werden langsamer sein als die Testmethode des Regex:
// Use includes method on string
function hasWhiteSpace(s) {
const whitespaceChars = [' ', '\t', '\n'];
return whitespaceChars.some(char => s.includes(char));
}
console.log(hasWhiteSpace("Hello World!"));
console.log(hasWhiteSpace("HelloWorld!"));
console.time('hasWhiteSpace');
for (let i = 0; i < 1_000_000; i++) {
hasWhiteSpace("Some text here");
}
console.timeEnd('hasWhiteSpace');Wie Sie in den Leistungsbenchmarks sehen, ist die test-Methode leicht schneller als die some-Methode, was ohnehin kaum auffallen wird.
