【问题标题】:Contenteditable regex whitespace not working内容可编辑的正则表达式空格不起作用
【发布时间】:2020-03-25 20:41:35
【问题描述】:

我正在尝试验证 contenteditable 值是否只有空格/空格。在我的示例中,如果该值只有空格/空格,则根据我的正则表达式字符串它不应该匹配,但它不能按预期工作。当我输入完整的空格时,它会保持匹配。

编辑:黑色区域是您可以输入文本的地方。

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>

【问题讨论】:

  • 您是否有innerHTML 设置为与预期不匹配的示例?
  • 黑色空间是输入字段,抱歉我应该说清楚。
  • innerHTML 充满了     和其他实体,而不是实际的空格。

标签: javascript jquery html regex


【解决方案1】:

如果您查看实际的内部 HTML,您会看到诸如 &lt;br&gt; 元素或 &amp;nbsp; 实体之类的内容。您的正则表达式似乎无法处理这些问题。

如果您只关心文本而不是 HTML,您可能需要考虑使用 textContent 而不是 innerHTML。或者,如果您真的想要纯文本,请使用 &lt;textarea/&gt; 而不是内容可编辑 div,后者用于生成 HTML 的富文本样式编辑。

编辑

您的正则表达式也不完全正确。因为您正在使用带有new RegExp("^(?!\s*$).+")RegExp 构造函数,所以字符串文字中的\s 将变成普通的s;如果您希望正则表达式中有一个实际的\s,则必须使用\\s。 IMO,除非您正在动态构建一个正则表达式文字,否则最好使用正则表达式文字,例如/^(?!\s*$).+/,或者我发现这是一种更简单的替代方法,可以告诉您字符串是否完全是空格:/^\s+$/

【讨论】:

  • 我只想获取文本,所以我将其更改为 var titleinput = $('#artwork-title').text();但我仍然得到空白空间的匹配值。新小提琴:jsfiddle.net/tkvefqgr/1
猜你喜欢
  • 2019-05-07
  • 1970-01-01
  • 1970-01-01
  • 2011-05-16
  • 2012-12-26
相关资源
最近更新 更多