Contenteditable регулярное выражение пробела не работает - PullRequest
0 голосов
/ 25 марта 2020

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

редактировать: черное пространство - это место для ввода текста.

https://jsfiddle.net/j1kcer26/5/

JS

var checkTitle = function() {
  var titleinput = document.getElementById("artwork-title").innerHTML;
  var titleRegexp = new RegExp("^(?!\s*$).+"); //no blank spaces allowed
  if (!titleRegexp.test(titleinput)) {
    $('.start').removeClass('active-upload-btn');
    console.log('no match')

  } else if (titleRegexp.test(titleinput)) {
    $('.start').addClass('active-upload-btn');
    console.log('match')
  }
};

$('#artwork-title').on('keyup change input', function() {
  checkTitle();
});

HTML

<div class="post-title-header">
  <span class="user-title-input title-contenteditable maxlength-contenteditable" placeholder="enter text here" contenteditable="true" name="artwork-title" id="artwork-title" autocomplete="off" type="text" spellcheck="false"> 
  </span>
</div>

<div class="start">
      turn red if match
</div>

1 Ответ

3 голосов
/ 25 марта 2020

Если вы посмотрите на фактический внутренний HTML, вы увидите такие вещи, как <br> элементы или &nbsp; сущности. Ваше регулярное выражение не выглядит приспособленным для их обработки.

Возможно, вы захотите использовать textContent вместо innerHTML, если вам нужен текст, а не HTML , Или же, если вы действительно хотите простой текст, используйте <textarea/> вместо div с редактируемым содержимым, который предназначен для редактирования в формате расширенного текста, которое производит HTML.

Edit :

Ваше регулярное выражение тоже не совсем верно. Поскольку вы используете конструктор RegExp с new RegExp("^(?!\s*$).+"), \s в строковом литерале превратится в простой s; Вы должны использовать \\s, если хотите, чтобы в регулярном выражении было \s. IMO, всегда лучше использовать литерал регулярного выражения, если вы не строите его динамически, например, /^(?!\s*$).+/, или я считаю, что это более простая альтернатива, чтобы сказать вам, является ли строка полностью пробелом: /^\s+$/.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...