我需要验证一个输入值,0~99.99,浮点类型,小数点后只有两位数,如
有效示例:
0
1
.1
.12
12.12
无效的例子:
(empty)
100
123.1
.123
12.123
所以我创建了这个正则表达式
var isValid = new RegExp(/^\d{1,2}(\.\d{0,2})?$/).test(parseFloat($('#myText').val()));
还有其他检查方法吗?使代码更简单,更简单。
答案 0 :(得分:2)
“使代码更简单,更简单。”
行。你走了:
var isValid = /^\d{1,2}(\.\d{0,2})?$|^\.\d\d?$/.test($('#myText').val());
如果您已有正则表达式文字,则无需使用new RegExp()
。
你的正则表达式不接受.
作为第一个字符。
如果您将parseFloat()
的结果传递给.test()
,则表示您未验证用户实际输入的内容,因为parseFloat()
会忽略前导空格并拖尾非数字数据。因此,您的代码会接受,例如" 12abc"
为有效。如果您确实希望忽略前导空格或尾随空格,则可以在正则表达式中使用它。
答案 1 :(得分:2)
您可以尝试使用正则表达式:
^\d{1,2}(?:\.\d{1,2})?$|^\.\d{1,2}$
正则表达式分为两部分:
^\d{1,2}(?:\.\d{1,2})?$
这将接受2位数字,可能的小数位,最多两位小数。
^
匹配该行的开头
\d{1,2}
匹配任意数字至少1次,最多2次。
(?: ... )
是一个非捕获组(通过不必保留捕获的组,这使得正则表达式更有效)
?
表示0或1次,
$
表示行尾(从而确保没有更多数字)。
第二部分^\.\d{1,2}$
接受小数点,其中第一个数字可以不存在,因此.1
将通过。
第一部分和第二部分与|
(OR运算符)链接,这意味着如果第一部分匹配失败,引擎将在调用它之前尝试使用第二部分<= 1 p>
答案 2 :(得分:0)
这是一个正则表达式,也接受前导零和尾随零:http://regex101.com/r/hV1uD8
/^(?:0*\d{1,2})(?:\.\d{0,2}0*)?$|^(?:0*\.)(?:\d{1,2}0*)$/
有效示例:
0
1
.1
.12
12.12
23.1
023.1
12.1200
012.120
1.
1.010
无效:
100
123.1
.123
12.123
12.1201
或者您可以使用parseFloat
来处理前导零和尾随零,然后使用另一个答案中建议的正则表达式:
var isValid = /^\d{1,2}(?:\.\d{1,2})?$|^\.\d{1,2}$/.test(parseFloat($('#myText').val()));
但这样效率会降低,因为你会解析相同的表达式两次。