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

时间:2016-07-26 22:20:46

标签: javascript jquery html

我正在尝试使用jquery对文本框值进行验证,以确保textbox仅接受字母数字值。我也试图在单词之间留出空格。我不是试图在文本框中允许空格左右句子。如何在文本框中的单词中间留出空格?

My trails fiddle

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

2 个答案:

答案 0 :(得分:1)

你只能使用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(),但您也可以在使用值时修剪。

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

  • 在用户输入值
  • 之前,请勿测试验证
  • 标记无效值而不是更改它们

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

答案 1 :(得分:1)

在纯正则表达式中,这应该有效/^[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]+|)$/

总而言之,正如其他答案所提到的那样,修改价值可能是更好的可用性,因为如果用户意外添加了前导空格或尾随空格,则不会阻止用户向前移动。