0

我想要一个文本框的正则表达式,它只允许 3 位数字并通过以下条件:

  1. 只有数字(234 或 123)或
  2. 最后只有一位小数 (55.1)
  3. 不应允许空格
  4. 如果使用小数,那么小数点之后/之前也应该有一个数字(不允许使用 555. 或 12. 或 .12)

我有以下部分工作的RE:

/^\d{0,3}$|^\d{0,2}[\.]\d{1}$/

修改这个有什么帮助吗?

看起来问题是额外的:

我在按键时使用代码。因此它会在按键时验证每个按下的值。

  if (window.event)    {
        knum = e.keyCode;
    }
    else if (e.which)    {
        knum = e.which;
    }
    kchar = String.fromCharCode(knum);
    numcheck = /^\d{0,3}$|^\d{0,2}[\.]\d{1}$/;

    alert(numcheck.test(kchar));

对于任何十进制按键,它都会返回 false。即使我输入 55,然后尝试中间的小数使其变为 5.5,ite 返回 false。

4

3 回答 3

2

您至少需要 1 个数字,但最多需要 3 个:\d{1,3}

或者

小数点前必须至少有 1 位,但不能超过 2 位,小数点后必须有 1 位:\d{1,2}[.]\d

所以这些结合起来:/(^\d{1,3}$|^\d{1,2}[.]\d$)/

更新:

您正在测试在按键事件中添加的字符,而不是输入字段的完整值。这永远不会有预期的结果。

document.getElementById("yourfield").onkeyup = function(e) {

    // the event
    if (!e) e = window.event;

    // determine the target of the keyup event (the input field)
    var targ;
    if (e.target)
       targ = e.target;
    else if (e.srcElement)
       targ = e.srcElement;
    if (targ.nodeType == 3) // defeat Safari bug
       targ = targ.parentNode;

    // get the value
    kchar = targ.value;
    numcheck = /^\d{0,3}$|^\d{0,2}[\.]\d{1}$/;

    // test
    alert(numcheck.test(kchar));
}
于 2012-08-01T09:27:49.940 回答
1

试试/^\d{1,3}|(\d{1,2}\.\d)$/

你的角色类不应该逃避句号,所以应该是[.],虽然我更喜欢写只是\.因为为一个角色创建一个类是一种浪费。同样,当意味着完全相同的事情时,\d{1}是多余的。\d我还假设您也不想允许空文本框,所以我写了一些允许 1-3 位数字或 1-2 位数字,一个句点,然后是一个数字。如果这是错误的,您可以将第一个范围更改\d{0,3},这将允许文本框不包含任何内容。

于 2012-08-01T09:47:50.460 回答
0

使用这个:

/^\d{1,3}$|^\d{1,2}[.]\d$/
于 2012-08-01T09:29:21.143 回答