我有一个用户需要输入窗口宽度的字段。它需要介于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;
}
}
答案 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。