Próbuję sprawdzić, czy ciąg ma spację . Znalazłem tę funkcję, ale wygląda na to, że nie działa:
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;
}
Nawiasem mówiąc, dodałem cytaty do RegExp
.
Czy jest coś nie tak? Czy jest coś lepszego, czego mogę użyć? Mam nadzieję, że JQuery.
Odpowiedzi:
Możesz po prostu użyć metody indexOf w ciągu wejściowym:
function hasWhiteSpace(s) { return s.indexOf(' ') >= 0; }
Lub możesz użyć metody testowej na prostym wyrażeniu regularnym:
function hasWhiteSpace(s) { return /\s/g.test(s); }
Spowoduje to również sprawdzenie innych znaków odstępu, takich jak Tab.
źródło
Twoje wyrażenie regularne nie będzie do niczego pasować, tak jak jest. Zdecydowanie musisz usunąć cudzysłowy -
"/"
znaki są wystarczające./^\s+$/
sprawdza, czy łańcuch to WSZYSTKIE białe spacje:^
dopasowuje początek łańcucha.\s+
oznacza co najmniej 1 lub więcej spacji.$
dopasowuje koniec łańcucha.Spróbuj zamienić wyrażenie regularne na
/\s/
(bez cudzysłowów)źródło
Ta funkcja sprawdza inne rodzaje białych znaków, a nie tylko spację (tabulator, powrót karetki itp.)
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
Jeśli nie chcesz korzystać z Lodash , oto prosta
some
implementacja z 2s
:const ssome = (predicate, list) => { const len = list.length; for(const i = 0; i<len; i++) { if(predicate(list[i]) === true) { return true; } } return false; };
Następnie wystarczy zamienić
some
zssome
.const hasWhitespace = char => some( w => char.indexOf(w) > -1, whitespaceCharacters )
Dla tych w Node użyj:
const { some } = require('lodash/fp');
źródło
Oto moja sugerowana weryfikacja:
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; } }
źródło
Jednym prostym podejściem, które możesz zastosować, jest porównanie długości oryginalnego ciągu z długością łańcucha, aby białe spacje zostały zastąpione niczym. Na przykład:
function hasWhiteSpaces(string) { if (string.length == string.replace(" ", "").length) {return false} return true }
źródło
Dzięki dodatkom do języka jest to znacznie łatwiejsze, a dodatkowo możesz skorzystać z wcześniejszego zwrotu:
// 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));
Nie przeprowadziłem testu wydajności, ale powinny one być szybsze niż regex, ale dla małych fragmentów tekstu i tak nie będzie tak dużej różnicy.
źródło
Kilku innych opublikowało odpowiedzi. Istnieją pewne oczywiste problemy, na przykład zwraca,
false
gdy regex przechodzi, a operatory^
i$
wskazują początek / koniec, podczas gdy szukane pytanie ma (dowolną) białą spację, a nie: zawiera tylko białe znaki (które sprawdza regex).Poza tym sprawa jest tylko literówką.
Zmień to...
var reWhiteSpace = new RegExp("/^\s+$/");
Do tego...
var reWhiteSpace = new RegExp("\\s+");
Korzystając z wyrażenia regularnego w obrębie
RegExp()
, musisz wykonać dwie następujące czynności .../
nawiasy początkowe i końcowe .\\s
Zamiast\s
itd.Pełne działające demo z kodu źródłowego ....
$(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>
źródło