0

Регулярное выражение для пустой строки или пробелов

26

Описание проблемы

Я пытаюсь обнаружить, вводит ли пользователь пробелы в текстовом поле. У меня есть следующий код:

var regex = "^\s+$"; 
if($("#siren").val().match(regex)) {
    echo($("#siren").val());
    error += 1;
    $("#siren").addClass("error");
    $(".div-error").append("- Champ Siren/Siret ne doit pas etre vide<br/>");
}

Условие if($("#siren").val().match(regex)) должно проверять, является ли строка только пробелами, однако почему-то это не работает. В чем может быть моя ошибка?

Спасибо за помощь!

5 ответ(ов)

0

Проблема с \ (обратный слэш) в вызове .match заключается в том, что он неправильно экранирован. Конечно, проще использовать литерал регулярного выражения. Оба варианта будут работать:

var regex = "^\\s+$";
var regex = /^\s+$/;

Также имейте в виду, что знак + требует наличия хотя бы одного пробела. Возможно, вам стоит использовать *, чтобы включить возможность нуля или более пробелов.

0

Если вы ищете пустую строку в дополнение к пробелам, вам нужно использовать *, а не +.

В вашем случае регулярное выражение ^\s*$ правильно проверяет, является ли строка пустой или состоит только из пробелов. Знак * означает "0 или более" соответствий, тогда как + требует хотя бы одно соответствие. Поэтому использование * гарантирует, что пустая строка (или строка, содержащая только пробелы) также будет соответствовать вашему выражению.

Если вы хотите проверить, что строка не содержит ничего, кроме пробелов, ваше регулярное выражение уже написано верно:

var regex = /^\s*$/;

Так что проблем с вашим регекспом нет, просто убедитесь, что вы используете *, если пустая строка — это допустимый вариант.

0

Если вы используете jQuery, у вас есть метод .trim(). Пример проверки на пустое значение поля с id siren может выглядеть так:

if ($("#siren").val().trim() === "") {
  // поле пустое
}

Метод .trim() удаляет пробелы в начале и в конце строки, поэтому условие будет истинным, если в поле ничего нет или только пробелы.

0

Если вас интересует только пробел в начале и конце строки (без учета пробелов в середине), то можно воспользоваться методом String.trim():

"    ваше содержимое строки  ".trim();

// => "ваше содержимое строки"

Этот метод удаляет все пробелы до и после текста, оставляя пробелы между словами нетронутыми.

0

Ваш код, как я вижу, предполагает проверку на совпадение строки с нулями и пробелами. Однако, чтобы ваше решение работало корректно, стоит немного улучшить его. Ваша регулярная выражение уже правильно настроено для проверки на пустую строку или строку, состоящую только из пробелов.

Вот исправленный код и пояснение:

var error=0;
var test = [" ", "   "];

if(test[0].match(/^\s*$/)) { // Убираем 'g' флаг, так как это не нужно
    $("#output").html("MATCH!");
    error += 1;
} else {
    $("#output").html("no_match");
}

Объяснение:

  1. В вашем регулярном выражении ^\s*$ проверяет, состоит ли строка только из пробелов или пуста. Флаг g (глобальный) не нужен, так как match возвращает первое совпадение, и вы не хотите искать по всей строке.

  2. test содержит массив строк. Вы проверяете только первую строку test[0] (то есть " "). Если вы хотите проверить и другие строки в массиве, вам нужно будет использовать цикл.

  3. Если test[0] соответствует выражению (то есть является пустой или состоит только из пробелов), вы выводите "MATCH!", и error увеличивается на 1.

Если вам нужно проверить все строки в массиве test, вы можете сделать это следующим образом:

var error = 0;
var test = [" ", "   "];

for (var i = 0; i < test.length; i++) {
    if (test[i].match(/^\s*$/)) {
        $("#output").append("MATCH! for '" + test[i] + "'<br>");
        error += 1;
    } else {
        $("#output").append("no_match for '" + test[i] + "'<br>");
    }
}

Таким образом, вы проверите каждую строку в массиве и выведете соответствующий результат для каждой из них.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь