0

我正在尝试实现这个正则表达式检查。(1 个整数,3 位数字)

有效的:

  • 0.236
  • 0.21
  • 1.231
  • 1.01

无效的:

  • 12.23
  • 12321
  • 0.21323

我希望只有 1 位数字后跟只有 0-3 位小数的小数。

任何帮助都会很棒。我试过这个: ^(([0-9]{1})?(?=\.)[0-9]{0,3})|([0-9]{1})$ 但没有锁。

编辑:我应该补充说我正在使用一个名为 inputmask 的 JQuery 插件。我希望输入掩码只接受我的要求。

4

2 回答 2

1

我希望只有 1 个整数后跟一个只有 0-3 位小数的小数。

我认为“1 个整数”是指一个数字12一个整数也是如此。如果是这样:

\d\.\d{0,3}

这匹配一个数字,后跟一个.零到三个数字。如果您想进一步断言它与整个字符串匹配,请在任一端添加锚点:

^\d\.\d{0,3}$

请注意,您给出的规则允许1.,这似乎是您可能不想要的。如果你不这样做,那么我们需要做更多的工作:

^\d(?:\.\d{1,3})?$

也就是说:一位数字可选地后跟一个.1-3 位数字。它有“整个字符串”锚,如果你不想要它们,请将它们移除。

使用最后一个的实时示例:

var input = document.querySelector("input");
var rex = [
  /\d\.\d{0,3}/,
  /^\d\.\d{0,3}$/,
  /^\d(?:\.\d{1,3})?$/
];
input.oninput = input.onpaste = input.onkeypress = updateDisplay;

function updateDisplay() {
  rex.forEach(function(r, index) {
    var display = document.getElementById("r" + index);
    if (!input.value) {
      display.innerHTML = "--";
    } else if (input.value.match(r)) {
      display.innerHTML = "valid";
    } else {
      display.innerHTML = "INVALID";
    }
  });
}
<input type="text">
<p><code>/\d\.\d{0,3}/</code> says: <span id="r0"></span></p>
<p><code>/^\d\.\d{0,3}$/</code> says: <span id="r1"></span></p>
<p><code>/^\d(?:\.\d{1,3})?$/</code> says: <span id="r2"></span></p>

于 2015-10-08T14:58:22.470 回答
1

为此,请jquery-inputmask使用

<input id="example2" data-inputmask-regex="/^\d{1}\.\d{0,3}$/" />

然后在你的 JavaScript 文件中,添加这个

$(document).ready(function(){
   $("#example2").inputmask("Regex");
});

这是正则表达式细分

^- 正则表达式必须以此表达式开头

\d{1}- 从 0 到 9 正好是 1 位

\.- 后面是句号。重要的是要注意句点必须转义

\d{0,3}- 后跟 0 到 3 位数字

$- 正则表达式必须以此表达式结尾

我测试了你所有的例子。

于 2015-10-08T15:00:04.513 回答