我有购物车的这段代码,但如果有小数值(分)则失败。我尝试替换正则表达式,但然后它返回NaN
(非数字)错误:
代码:
<script type="text/javascript">
$(document).ready(function () {
var $selects = $("select").change(function (e) {
var total = 0;
$selects.each(function() {
var val = this.value.match(/^\$(\d+)$/);
total += val ? +val[1] : 0;
});
$("#total").val(total);
});
});
</script>
在匹配行中替换正则表达式:
var val = this.value.match(/^\$(\d+(?:\.\d{1,2}\)?$/);
答案 0 :(得分:2)
要匹配$123.56
或$12.5
等字符串,您可以使用此固定正则表达式:
^\$(\d+(?:\.\d{1,2})?)$
^ ^
请参阅demo
由于非捕获组?
之后的(?:\.\d{1,2})
量词,它也会匹配整数值。
注意:它实际上是同一个正则表达式,我在最后)
之前删除了反斜杠,并在模式的末尾添加了)
以关闭首先,只有正确地捕捉群体。
答案 1 :(得分:1)
试试这个:
var val = this.value.match(/^\$(\d+\.?\d*)$/);
答案 2 :(得分:1)
如果我理解正确,您只想匹配一个带小数值或没有小数值的数字。你可以用这个:
^\$([\d\.]+)$
如果要将小数限制为两个位置,请将其放在未捕获的组中并使用{}
运算符:
^\$(\d+(?:\.\d{1,2})?)$
^
:字符串/行的开头。\$
:按字面意思匹配$
。(
:启动捕获组。\d+
:匹配一个或多个数字(?:
:启动一个无法捕获的群组。\.
:按字面意思匹配.
。\d{1,2}
:匹配长度为1或2的数字。?
:懒惰选择器,整个小数场景是可选的(所以你可以匹配整数)。$
:匹配字符串/行的结尾。