Я пытаюсь проверить, есть ли в строке пробел . Я нашел эту функцию, но, похоже, она не работает:
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;
}
Кстати, я добавил цитаты в RegExp
.
Здесь что-то не так? Есть ли что-нибудь получше, что я могу использовать? Надеюсь, JQuery.
Ответы:
Вы можете просто использовать метод indexOf во входной строке:
function hasWhiteSpace(s) { return s.indexOf(' ') >= 0; }
Или вы можете использовать тестовый метод в простом RegEx:
function hasWhiteSpace(s) { return /\s/g.test(s); }
Это также проверит наличие других символов пробела, таких как Tab.
источник
Ваше регулярное выражение ни с чем не будет соответствовать. Обязательно нужно убрать кавычки -
"/"
символов достаточно./^\s+$/
проверяет, является ли строка ВСЕМИ пробелами:^
соответствует началу строки.\s+
означает минимум 1, а возможно и больше пробелов.$
соответствует концу строки.Попробуйте заменить регулярное выражение на
/\s/
(и без кавычек)источник
Эта функция проверяет наличие других типов пробелов, а не только пробелов (табуляция, возврат каретки и т. Д.)
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
Если вы не хотите использовать Lodash , то вот простая
some
реализация с 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; };
Тогда просто замените
some
наssome
.const hasWhitespace = char => some( w => char.indexOf(w) > -1, whitespaceCharacters )
Для тех, кто находится в Node, используйте:
const { some } = require('lodash/fp');
источник
Вот моя предлагаемая проверка:
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; } }
источник
Один простой подход, который вы можете использовать, - это сравнить длину исходной строки с длиной строки, чтобы пробелы не заменялись ничем. Например:
function hasWhiteSpaces(string) { if (string.length == string.replace(" ", "").length) {return false} return true }
источник
С дополнениями к языку это намного проще, плюс вы можете воспользоваться преимуществами раннего возврата:
// 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));
Я не запускал тест производительности, но он должен быть быстрее, чем регулярное выражение, но для небольших текстовых фрагментов в любом случае не будет такой большой разницы.
источник
Несколько других опубликовали ответы. Есть некоторые очевидные проблемы, как она возвращается ,
false
когда Regex проходит, а^
и$
операторы указывают на начало / конец, в то время как вопрос ищет имеет (любой) пробельных, а не: содержит только пробелы (что регулярное выражение проверки).Кроме того, это всего лишь опечатка.
Измени это ...
var reWhiteSpace = new RegExp("/^\s+$/");
К этому...
var reWhiteSpace = new RegExp("\\s+");
При использовании регулярного выражения внутри
RegExp()
вы должны сделать две следующие вещи .../
скобки.\\s
Вместо\s
и т. Д.Полная рабочая демонстрация из исходного кода ....
$(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>
источник