Javascript中的正则表达式,带小数的数字

时间:2012-08-01 09:20:15

标签: javascript regex

我想要一个文本框的正则表达式,它只允许3位数并传递以下标准:

  1. 仅限数字(234或123)或
  2. 最后只有一位小数(55.1)
  3. 不应允许空格
  4. 如果使用小数,那么小数点后/前应该有一个数字(555。或12.或.12不应该被允许)
  5. 我有以下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,迭代返回false。

3 个答案:

答案 0 :(得分:2)

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

OR

小数点前必须至少有1位但不得超过2位数:\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));
}

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

使用此re:

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