1

我有一个字段,用户需要在其中输入窗口的宽度。它需要介于 16.75 和 48 之间,并且仅以 0.25 为增量(因此它必须以 0.00、0.25、0.50、0.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;
    }
}
4

5 回答 5

3

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

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

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

OR[25]表示匹配 2 或 5

于 2013-10-23T20:56:28.380 回答
2

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

/^\d{2}\.(00|25|50|75)$/
于 2013-10-23T20:56:34.230 回答
2

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

var n = 35.23;

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

n = 35.25;

n >= 16.75 && n <= 48 && !(n % .25); //true
于 2013-10-23T21:07:36.303 回答
1

这是一种非正则表达式的方法,它可能更有效且不那么混乱:

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

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

于 2013-10-23T21:01:08.863 回答
1

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

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

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

于 2013-10-23T21:05:00.433 回答