防止单词之间有多个space

Prevent more than one space between words

我有一个功能可以防止人们由于持续的数据输入问题而将数字或除字母以外的任何符号输入文本框。

<td><input type="text" name="name" onkeypress="return isAlfa(event)"></td>

现在一些工作人员出于未知原因随机在单词之间放置两个 space。所以我需要防止他们在单词之间放置一个以上的 space。我想在同一个函数中执行此操作,但它总是出错。

function isAlfa(evt) {
  evt = (evt || window.event);
  var charCode = (evt.which || evt.keyCode);

  if ((charCode > 32)
    && (charCode < 65 || charCode > 90)
    && (charCode < 97 || charCode > 122)
  ) {
    return false;
  }
  return true;
}

如何防止他们在单词之间输入多个 space?

与其监听和评估每次按键操作,不如仅对任何和所有输入做出反应,然后清理通过 RegExp 输入的任何内容要简单得多。

示例:

<input type=text id=myfield />

JS:

document.querySelector('#myfield').addEventListener('input', evt => {
    evt.target.value = evt.target.value.replace(/[^a-z\s]/ig, '').replace(/\s{2,}/g, ' ');
});

首先将所有 non-letters 和 space 替换为空,然后将 2 个或更多 space 的序列替换为单个 space.

可能会尝试使用类似这样的东西。在你的 keypress 事件上尝试使用 string substr 方法检查最后一个值,如果这给你一个 space 并且当前代码也是 Space 那么阻止或做任何您想对输入做的事情。

function checkstuff(event){
  if (event.target.value.substr(-1) === ' ' && event.code === 'Space') {
    console.log('space pressed in sequence');
  }
}
<input type='text' onkeypress="checkstuff(event)">

忽略所有其他有用的建议和评论并严格按照 OP 的要求必须...

  1. 调整 return 条件,考虑当前击键是否会创建空白序列。
  2. 因此必须实施一种方法来准确确定这一点。
  3. 可能还有一些可能的辅助方法。
  4. 代码示例 ...

function isWhiteSpace(char) {
  return (/\s/).test(char);
}
function willCreateWhitespaceSequence(evt) {
  var willCreateWSS = false;
  if (isWhiteSpace(evt.key)) {
  
    var elmInput = evt.currentTarget;
    var content = elmInput.value;

    var posStart = elmInput.selectionStart;
    var posEnd = elmInput.selectionEnd;

    willCreateWSS = (
         isWhiteSpace(content[posStart - 1] || '')
      || isWhiteSpace(content[posEnd] || '')
    );
  }
  return willCreateWSS;
}

function isAlfa(evt) {

  evt = (evt || window.event);
  var charCode = (evt.which || evt.keyCode);

  return ((
       (charCode > 32)
    && (charCode < 65 || charCode > 90)
    && (charCode < 97 || charCode > 122)

  ) || willCreateWhitespaceSequence(evt)) ? false : true;
}
<input type="text" name="name" onkeypress="return isAlfa(event)"/>

此代码将阻止多个白色 space,也就是说,它只允许 1 个 space,并且会阻止两个或更多白色 space。您可以配置要拒绝的白色数量space。