Как определить строку, содержащую только пробелы?
Длина строки, которая содержит одно пространство, всегда равна 1:
alert('My str length: ' + str.length);
Пространство является символом, поэтому:
str = " ";
alert('My str length:' + str.length); // My str length: 3
Как я могу провести различие между пустой строкой и строкой, содержащей только пробелы? Как определить строку, содержащую только пробелы?
Ответы
Ответ 1
Для этого вы можете использовать регулярное выражение для удаления всех пробелов в строке. Если длина результирующей строки равна 0
, вы можете быть уверены, что в исходном тексте содержится только пробел. Попробуй это:
var str = " ";
if (!str.replace(/\s/g, '').length) {
console.log('string only contains whitespace (ie. spaces, tabs or line breaks)');
}
Ответ 2
Самое быстрое решение будет использовать функцию прототипа regex test() и поиск любого символа, который не является пробелом или разрывом строки \S
:
if (/\S/.test(str))
{
// found something other than a space or line break
}
Если у вас супер длинная строка, это может существенно повлиять.
Ответ 3
Вы можете обрезать значение String, создав функцию обрезки для ваших строк.
String.prototype.trim = function () {
return this.replace(/^\s*/, "").replace(/\s*$/, "");
}
теперь он будет доступен для каждой строки, и вы можете использовать его как
str.trim().length// Result will be 0
Вы также можете использовать этот метод для удаления пробелов в начале и в конце строки i.e
" hello ".trim(); // Result will be "hello"
Ответ 4
Удаление пробела из строки может быть выполнено с помощью String.trim()
.
//!str will return true if the string is null, undefined, or ''
//!str.trim() will return true if the string is '' after removing trailing whitespaces (which means it is an empty string)
function isNullOrEmpty(str){
return !str||!str.trim();
}
Этот метод можно использовать, чтобы проверить, содержит ли строка только пробелы и может вызываться каждый раз так:
var str = document.getElementById("txt").value;
if(isNullOrEmpty(str)){
console.log("String is empty or contains only spaces.");
}
Демо-версия:
function isNullOrEmpty(str){
return !str||!str.trim();
}
const resultElem = document.getElementById("result");
const inputElem = document.querySelector('input');
function testEmpty(){
if(isNullOrEmpty(inputElem.value)){
result.textContent = "Input is an empty String or a String containing only spaces.";
} else {
result.textContent = "Input is not an empty String or a String containing only spaces.";
}
}
<input type="text">
<br/>
<button onClick="testEmpty()">Check</button>
<p/>
<span id="result"></span>
Ответ 5
Обрезайте значение строки, создав функцию обрезки
var text = " ";
if($.trim(text.length == 0){
console.log("Text is empty");
}
else
{
console.log("Text is not empty");
}
Ответ 6
Подобно ответу Рори, с ECMA 5 теперь вы можете просто вызывать str.trim(). Length вместо использования регулярного выражения. Если полученное значение равно 0, значит, у вас есть строка, содержащая только пробелы.
if (!str.trim().length) {
console.log("str is empty!");
}
Вы можете узнать больше об отделке здесь.