【问题标题】:Assistance with a regular expression Javascript协助正则表达式 Javascript
【发布时间】:2015-10-08 14:54:41
【问题描述】:

我正在尝试实现这个正则表达式检查。 (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 插件。我希望输入掩码只接受我的要求。

【问题讨论】:

  • @Tushar:这将匹配他三分之二的“无效”示例。
  • 你的号码会自己输入吗?还会有其他文字吗?这些是否有效:$1.230.325some text 1.23
  • 不要重命名问题以包含“已解决”一词,请参阅How does accepting an answer work?

标签: javascript jquery regex jquery-inputmask


【解决方案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 位数字

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

我测试了你所有的例子。

【讨论】:

  • 谢谢。我试图投票,但由于我是新手,所以不允许我这样做。 :(
【解决方案2】:

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

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

\d\.\d{0,3}

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

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

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

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

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

Live Example使用最后一个:

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>

【讨论】:

  • 谢谢。我已经尝试了所有三个但仍然无法正常工作。抱歉,我应该提到我正在使用一个名为“inputmask”的插件。我只想让用户输入 1 位、十进制和 0-3 位。
  • @user3407584:我在第三个开头有错字。正则表达式肯定有效,请参阅实时示例。
  • 您应该接受这个答案。他以几分钟的优势击败了我。反正我觉得比我的好。
  • @user3407584:或者,如果您发现 Richard 的解释更有用,请接受该解释。 “第一”不一定意味着“最好”。 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-04
  • 1970-01-01
  • 2010-09-30
  • 2014-03-24
  • 1970-01-01
相关资源
最近更新 更多