验证输入的浮点格式

时间:2014-01-05 05:49:30

标签: javascript jquery regex

我需要验证一个输入值,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()));

还有其他检查方法吗?使代码更简单,更简单。

3 个答案:

答案 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}$

regex101 demo

正则表达式分为两部分:

^\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()));

但这样效率会降低,因为你会解析相同的表达式两次。