Javascript Jquery允许字母数字验证中使用空格

Javascript Jquery允许字母数字验证中使用空格,javascript,jquery,html,Javascript,Jquery,Html,我正在尝试使用jquery对textbox值进行验证,以确保textbox只接受字母数字值。我还试图在单词之间留出空格。我不想在文本框中给句子的左右两边留空格。如何在文本框中的单词中间留出空格 仅使用keyup,您将无法优雅地完成此操作,因为在输入句子的过程中,您刚刚输入的空格(希望它位于中间)位于末尾 相反,我会这样做: $('#dsTest').keyup(function() { if (this.value.match(/[^a-zA-Z0-9 ]/g)) { this.v

我正在尝试使用jquery对textbox值进行验证,以确保textbox只接受字母数字值。我还试图在单词之间留出空格。我不想在文本框中给句子的左右两边留空格。如何在文本框中的单词中间留出空格


仅使用
keyup
,您将无法优雅地完成此操作,因为在输入句子的过程中,您刚刚输入的空格(希望它位于中间)位于末尾

相反,我会这样做:

$('#dsTest').keyup(function() {
  if (this.value.match(/[^a-zA-Z0-9 ]/g)) {
    this.value = this.value.replace(/[^a-zA-Z0-9 ]/g, '');
  } 
});

$('#dsTest').focusout(function() {
  this.value = this.value.trim();
});
允许在键入过程中键入空格,并在稍后的某个合理时间使用
String.trim()
除去前导空格和尾随空格。在我的示例中,我使用了
.focusout()
,但您也可以在使用值时进行修剪

这是一个更广泛的验证问题类别的示例,其中输入时进行测试会阻止用户输入一个一旦输入就合法的值,因为每次输入一个字符的值需要该值暂时处于无效状态。有两种处理该问题的主要方法:

  • 在用户完成输入值之前,不要进行验证测试
  • 标记无效值,而不是更改它们

您还可以将两者结合起来—例如,在用户键入时突出显示字段以显示当前值无效,然后如果用户在无效值仍然存在时离开字段,也可以修复该值以使其有效

在纯正则表达式中,这应该有效
/^[a-zA-Z0-9]+[a-zA-Z0-9\s]*[a-zA-Z0-9]+$/g
。请注意,这将要求值中至少包含2个字符。如果您还希望允许它为空,则可以执行
/^([a-zA-Z0-9]+[a-zA-Z0-9\s]*[a-zA-Z0-9]+|)$/


综上所述,正如其他答案所提到的那样,在可用性方面,如果用户不小心添加了前导空格或尾随空格,那么只修剪该值可能会更好,因为这不会阻止用户向前移动。

是否有任何选项允许单词之间使用空格?我修改了现有的正则表达式,允许文本字段中使用空格。在每次键盘输入后进行测试时,允许“单词间”空格的问题在于,它不可能知道您刚才键入的空格后面是否会有另一个单词(并且是允许的),或者您是否已经完成了(这是一个应该删除的终端空格)。
/^([a-zA-Z0-9]+[a-zA-Z0-9\s]*[a-zA-Z0-9]+|[a-zA-Z0-9]*)$/
还允许使用单个字母数字字符,从而可以在字段中键入。但是打字空间仍然是个问题,除非你回去把它们插入中间。这很痛苦。根据@s-McCrohan的观点,理解为什么要在keyup上进行检查是很有帮助的。
$('#dsTest').keyup(function() {
  if (this.value.match(/[^a-zA-Z0-9 ]/g)) {
    this.value = this.value.replace(/[^a-zA-Z0-9 ]/g, '');
  } 
});

$('#dsTest').focusout(function() {
  this.value = this.value.trim();
});