我需要使用jQuery将字段与正则表达式匹配。目前我正在使用:
onsubmit: function (settings, td) {
//select integers only
var intRegex = /[0-9 -()+]+$/;
var input = $(td).find('input');
var original = input.val();
if (original <= 0) {
Alert('The amount should be bigger than 0');
return false;
}
if (!original.match(intRegex)) {
Alert('Please enter a valid number');
return false;
}
else {
return true;
}
}
像"abc"
这样的字符串未通过检查。但是@#$%
或"/"
这样的无效字符会通过检查,这会导致我的方法出错。
我正在寻找正则表达式:
匹配:1.20, 1, 2.00, 3.1
不匹配:-1.2, abc, 1/2, $, @#$%
我浏览了正则表达式库,但如果我将(^\d*\.?\d*[0-9]+\d*$)|(^[0-9]+\d*\.\d*$)
放入我的脚本中,则会出现语法错误...
答案 0 :(得分:5)
使用:
var intRegex = /^\d+(?:\.\d\d?)?$/;
这应该有效。
答案 1 :(得分:5)
这就是为什么你的原始正则表达式出现误报的原因:
/[0-9 -()+]+$/
^^^
我加下划线的部分形成了从空格字符(U+0020
)到左括号(U+0028
)的范围,使你的正则表达式与此相当:
/[0-9 !"#$%&'()+]+$/
如果你想匹配一个连字符,你需要用反斜杠转义它或将它放在集合的开头或结尾,如下所示:
/[0-9 ()+-]+$/
另外,如果“正则表达式库”是指RegExLib.com,我不相信我在那里发现的任何正则表达式。您发布的那个就是一个例子:
/(^\d*\.?\d*[0-9]+\d*$)|(^[0-9]+\d*\.\d*$)/
首先,它可以写得更简洁:
/^(\d*\.?\d+|\d+\.\d*)$/
其次,它匹配您可能不想要的123.
和000000.0000000
等字符串。如果您确实只想匹配正数,则必须确保在小数点之前或之后字符串中至少有一个非零数字。这是一种方法:
/^(?:[1-9]\d*(?:\.\d\d?)?|0\.[1-9]\d?|0\.0[1-9])$/
答案 2 :(得分:2)
var regxp = /^\d+(\.\d{1,2})?$/;