我正在尝试制作一个HTML表单,通过用户的输入字段接受评级。评级是0-10之间的数字,我希望它允许最多两位小数。我正在尝试使用正则表达式,使用以下
function isRatingGood()
{
var rating = document.getElementById("rating").value;
var ratingpattern = new RegExp("^[0-9](\.[0-9][0-9]?)?$");
if(ratingpattern.test(rating))
{
alert("Rating Successfully Inputted");
return true;
}
else
{
return rating === "10" || rating === "10.0" || rating === "10.00";
}
}
但是,当我在字段中输入任意4位或3位数字时,它仍然有效。它输出警报,所以我知道正则表达式失败了。 5位数字不起作用。我使用this previous answer作为基础,但它对我不起作用。
我目前的理解是表达式的开头应该是一个数字,然后可选地,应该接受小数位后跟1或2位数。
答案 0 :(得分:4)
您正在使用字符串文字来创建正则表达式。在字符串文字中,\
是转义字符。字符串文字
"^[0-9](\.[0-9][0-9]?)?$"
产生值(和正则表达式):
^[0-9](.[0-9][0-9]?)?$
(您可以通过在浏览器的控制台中输入字符串文字来验证)
\.
在字符串文字中不是有效的转义序列,因此会忽略反斜杠。这是类似的例子:
> "foo\:bar"
"foo:bar"
所以你可以看到,.
没有在正则表达式中转义,因此它保持其特殊含义并匹配任何字符。要么转义字符串文字中的反斜杠,要创建文字\
:
> "^[0-9](\\.[0-9][0-9]?)?$"
"^[0-9](\.[0-9][0-9]?)?$"
或使用正则表达式文字:
/^[0-9](\.[0-9][0-9]?)?$/
答案 1 :(得分:2)
您正在使用的正则表达式将解析为
/^[0-9](.[0-9][0-9]?)?$/
此处.
将匹配除换行符之外的任何字符。
要使其与.
字面值匹配,您需要添加额外的\
以转义\
。
var ratingpattern = new RegExp("^[0-9](\\.[0-9][0-9]?)?$");
或者,你可以简单地使用
var ratingPattern = /^[0-9](\.[0-9][0-9]?)?$/;
您也可以使用\d
代替课程[0-9]
。
var ratingPattern = /^\d(\.\d{1,2})?$/;
<强>演示强>
var ratingpattern = new RegExp("^[0-9](\\.[0-9][0-9]?)?$");
function isRatingGood() {
var rating = document.getElementById("rating").value;
if (ratingpattern.test(rating)) {
alert("Rating Successfully Inputted");
return true;
} else {
return rating === "10" || rating === "10.0" || rating === "10.00";
}
}
&#13;
<input type="text" id="rating" />
<button onclick="isRatingGood()">Check</button>
&#13;
答案 2 :(得分:2)
下面找到适合您任务的正则表达式候选人:
^[0-1]?\d(\.\d{0,2})?$
带有解释的
var list = ['03.003', '05.05', '9.01', '10', '10.05', '100', '1', '2.', '2.12'];
var regex = /^[0-1]?\d(\.\d{0,2})?$/;
for (var index in list) {
var str = list[index];
var match = regex.test(str);
console.log(str + ' : ' + match);
}
&#13;
答案 3 :(得分:1)
这也应该起到作用。你不需要从方括号内逃脱点:
^((10|\d{1})|\d{1}[.]\d{1,2})$
此外,如果您想要最高评级10使用
10 | ----接受10
\ d {1})| ----接受0-9的整数,如果不想要0,则用[1-9] {1}替换\ d
\ d {1} [。] \ d {1,2} ----在0到9的昏迷后接受带两个或一个数字的数字
现场演示:https://regex101.com/r/hY5tG4/7
除^ - ] \之外的任何字符除列出的特殊字符外的所有字符都是将其自身添加到字符类的文字字符。 [abc]匹配a,b或c literal characters
答案 4 :(得分:0)
我自己刚回答。
需要在小数点上添加方括号,因此正则表达式看起来像
var ratingpattern = new RegExp("^[0-9]([\.][0-9][0-9]?)?$");