Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
数字的Javascript正则表达式_Javascript_Regex - Fatal编程技术网

数字的Javascript正则表达式

数字的Javascript正则表达式,javascript,regex,Javascript,Regex,我试图制作一个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

我试图制作一个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位数字不起作用。我用它作为基础,但对我来说不太合适


我目前的理解是,表达式的开头应该是一个数字,然后可以选择接受一个小数位后跟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=newregexp(“^[0-9](\\\[0-9][0-9]?)?$”;
函数isRatingGood(){
var评级=document.getElementById(“评级”).value;
if(额定模式试验(额定值)){
警报(“评级成功输入”);
返回true;
}否则{
回报率评级==“10”| |评级==“10.0”| |评级==“10.00”;
}
}


检查
刚才我自己回答了这个问题

需要将方括号添加到小数点,因此正则表达式如下所示

var ratingpattern = new RegExp("^[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]?)?$/

这也应该起到作用。您不需要从方括号内转义点:

^((10|\d{1})|\d{1}[.]\d{1,2})$
此外,如果您希望最大额定值为10,请使用

10 |——接受10

\d{1})----接受0-9之间的整数,如果不需要0,则将\d替换为[1-9]{1}

\d{1}[.]\d{1,2}--在从0到9的coma之后接受带有两个或一个数字的数字

现场演示:


除^-]以外的任何字符\除列出的特殊字符外的所有字符都是文字字符,它们将自己添加到字符类中。[abc]匹配下面的a、b或c

为您的任务找到一个正则表达式候选者:

^[0-1]?\d(\.\d{0,2})?$
解释

var列表=['03.003','05.05','9.01','10','10.05','100','1','2','2.12'];
var regex=/^[0-1]?\d(\.\d{0,2})$/;
for(列表中的var索引){
var str=列表[索引];
变量匹配=正则表达式测试(str);
console.log(str+':'+匹配);

}
你究竟为什么需要精确到两位小数的评级?假设“评分”是“你觉得我们的服务怎么样?”类型的东西,谁会说“6.41”?很好的问题。说实话,我不知道,但我看到的价格有两个小数位(很明显)。这让我想到了如何使用正则表达式来表示评级的可选十进制表示。对于评级系统来说,它没有实际用途,但当我想到它时,我正在处理HTML代码中的评级。我想这一切都是为了学习。这可能“有用”,但不是因为你可能认为的原因。是的,我在想。我没有意识到反斜杠需要转义,而不是句号。完整的顶部确实需要在正则表达式中转义,这正是反斜杠的作用,但是在你达到这个程度之前,反斜杠本身需要在你用来创建正则表达式的字符串文字中转义。谢谢。我现在知道字符串和正则表达式需要区别对待:)@MaxZoom:如果您查看问题中的代码,OP将分别处理这种情况。总的来说,当然有更简洁的方法来处理这个问题,但我只关注实际问题。正则表达式只处理小数点前的第一个数字。这就是为什么我要用else语句。这适用于0.00-9.99。我同意,可能有更简洁的方法可以做到这一点。我就是想不起来。@mojo1mojo2:看看MaxZoom的答案。为什么
(10){1}
而不是
10
?保持简单。同意-这将是最佳选择它匹配一个子串
100
,而不匹配单个数字,即
5
看到你能看到那里的管道吗?解释为什么它与100匹配。我看不见。它的10或expresion.FWIW的其余部分,
{0,1}
相当于
(更短)。
^[0-1]?\d(\.\d{0,2})?$