2009-11-13 32 views
68

Ich versuche zu überprüfen, ob eine Zeichenfolge Leerzeichen hat. Ich fand diese Funktion aber es scheint nicht zu funktionieren:Überprüfen Sie, ob eine Zeichenfolge Leerzeichen hat

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

By the way, fügte ich Anführungszeichen RegExp.

Ist etwas nicht in Ordnung? Gibt es etwas besseres, das ich benutzen kann? Hoffentlich JQuery.

+2

Sie falsch sind Rückkehr, wenn die Zeichenfolge Leerzeichen hat, ist Ihre Logik rückwärts –

Antwort

184

Sie können einfach die indexOf Methode auf der 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); 
} 

Dies wird auch für andere weiße überprüfen Leerzeichen wie Tab.

+14

dies nicht für andere Arten von Leerraum nicht überprüft (zB \ t). –

+2

könntest du nicht auch an indexOf (/^\ s + $ /) anlegen? – Zoidberg

+0

Bernard: Du hast recht, ich habe eine Regex-Alternative hinzugefügt. – CMS

1

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

17

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

/^\s+$/ ist zu prüfen, ob die Zeichenfolge ALL Leerzeichen:

  • ^ passen der Beginn des Strings.
  • \s+ bedeutet mindestens 1, möglicherweise mehr, Leerzeichen.
  • $ entspricht dem Ende der Zeichenfolge.

Versuchen Sie, die Regex mit /\s/ (und ohne Anführungszeichen) ersetzt

1

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

Diese Funktion prüft, ob andere Arten von Leerzeichen, nicht nur Raum (tab, Schlitten Rückkehr etc.)

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 möchten hier nicht Lodash verwenden, dann ist eine einfache Implementierung 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 some nur mit ssome.

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

Für diejenigen in Knoten, zu verwenden:

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