0

我有一个验证字段值长度的函数,

function validateName(name) {
  if(name.val().length < 5) {
  }
}

我还想检查是否存在空格。我试过这个,但没有奏效:

function validateName(name) {
  if(name.val().length < 5 && name.val(" ") < 0) {
  }
}
4

1 回答 1

1

上面代码中的问题是,$.fn.val它根据作为输入接收的参数来改变行为;具体来说,当它在没有参数的情况下执行时是一个getter ,当它使用一个参数执行时是一个setter。所以这一行:

name.val(" ")

不检查值中是否存在空格,而是将值设置为单个空格。

有许多不同的方法可以检查一个字符串是否至少包含一个空格。在这里我会去String#indexOf,所以validateName函数可以写成:

function validateName(name) {
  var val = name.val();
  if (val && val.length < 5 && val.indexOf(" ") < 0) {
    // valid!
  }
}

一种更具表现力的方法是使用String#includes,但它也不太被浏览器广泛支持。

function validateName(name) {
  var val = name.val();
  if (val && val.length < 5 && val.indexOf(" ") < 0) {
    console.log("valid", val);
  } else {
    console.log("invalid", val);
  }
}

validateName($('<input value="b" />'));
validateName($('<input value="br" />'));
validateName($('<input value="bru" />'));
validateName($('<input value="brun" />'));
validateName($('<input value="bruno" />'));
validateName($('<input value="b ru" />'));
validateName($('<input />'));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

另外,作为一般建议,我不会用 jQuery 混淆验证逻辑;也就是说,最好validateName接受纯字符串作为输入,而不是表示输入字段的 jQuery 对象。

于 2012-11-28T16:39:23.777 回答