如何使用正则表达式测试特定的十进制?

时间:2013-10-23 20:54:03

标签: javascript regex

我有一个用户需要输入窗口宽度的字段。它需要介于16.75和48之间,并且仅以.25为增量(因此它必须以.00,.25,.50,.75结尾)。我尝试了以下测试我的正则表达式在数字31.25,但所有返回false。我已经在互联网上乱了,但对像我这样的正则表达式新手来说找不到多少帮助。有人可以帮我解决这个问题吗?

这是字段:

<input type="text" id="windowWidth" onchange="basePrice()">

这是JS:

function basePrice()
{
    var windowWidth = document.getElementById("windowWidth").value;
    var windowHeight = document.getElementById("windowHeight").value;

    if (windowWidth != "" && windowWidth > 16.75 && windowWidth < 48)
    {
         alert(/^\d{2}\.[00]$/.test(windowWidth));
         alert(/^\d{2}\.[25]$/.test(windowWidth));
         alert(/^\d{2}\.[50]$/.test(windowWidth));
         alert(/^\d{2}\.[75]$/.test(windowWidth));
    }
    else
    {
         alert("error");
         exit;
    }
}

5 个答案:

答案 0 :(得分:3)

删除[],用于正则表达式中的字符类:

alert(/^\d{2}\.(?:00|25|50|75)$/.test(windowWidth));

例如:[00]表示匹配文字0或0

OR [25]表示匹配2或5

答案 1 :(得分:2)

您可以将它们组合起来测试它们是否在您的范围内,然后使用以下正则表达式:

/^\d{2}\.(00|25|50|75)$/

答案 2 :(得分:2)

您不需要正则表达式。你可以简单地使用数学表达式。

var n = 35.23;

n >= 16.75 && n <= 48 && !(n % .25); //false

n = 35.25;

n >= 16.75 && n <= 48 && !(n % .25); //true

答案 3 :(得分:1)

这是一种非正则表达方式,可能更有效,更少杂乱:

var has25decimal = (windowWidth * 100) % 25 == 0

%(模数)在数字除以25后给出余数。当该数字为0时,数字可以除以25。

答案 4 :(得分:1)

如果你可以使用html 5输入属性,那么你可以试试这个(没有正则表达式):

<input type="number" id="windowWidth" onchange="basePrice()" min="16.75" max="48" step="0.25">

这将强制执行最小值和最大值,并在单击向上或向下箭头时更改0.25。