0

我已经尝试过这段代码,但我想我的正则表达式有错误,因为它总是true.

除了正则表达式,我还有一个问题,keypress因为我在添加新字符之前测试值,我不想使用,keyup因为我不知道最后一个字符是在哪里添加的(用户不会总是输入char 在输入字段的末尾)。

我会很感激一个好的解决方案,谢谢。

$('.myInputField').keypress(function(){
    var val = $(this).val();
    var regexTest = /^[0-9]{0,8}[.][0-9]{0,2}|[0-9]{0,8}$/;
    var ok = regexTest.test(val);
    if(ok)
        return true;
    else
        return false;
4

1 回答 1

0

我想你可能想要这样的正则表达式:

/^\d{0,8}(\.\d{0,2})?$/

您正在使用.而不是\.,但.会匹配任何字符。

?近端允许您拥有或不拥有“.12” 。

\d是一种限制数字的捷径。

请考虑不要keypress为此使用- keyup(更好)或change(最好)将是其他要考虑的选择。

如果您需要“非常敏感”的反馈(不能只使用change),请考虑这样做(请使用比我在示例中使用的简单 CSS 更好的方法):

$('.myInputField').keyup(function(e){
  var val = $(this).val();
  var regexTest = /^\d{0,8}(\.\d{1,2})?$/;
  var ok = regexTest.test(val);
  if(ok) {
      $(this).css('background-color', 'green');
  } else {
      $(this).css('background-color', 'red');
  }
});

JS 小提琴示例

注意:我还更改了代码,因此如果您.在输入中输入 a,我们希望您在小数点后至少放置一位数字。如果您真的不想要此编辑,\d{1,2}请将\d{0,2}

于 2013-03-24T15:16:15.853 回答