使用正则表达式掩码实时控制浮点输入
我已经实现了控制数字和浮点数的function。 但它对浮点数不起作用,必须像这样的表达式:
// I wish a number like x figures . 3 figures (example : 123456.123) /^([1-9][0-9]*|0)(\.[0-9]{3})?$/
但是这个表达式让人不知所措……
以下作品/(^\d+$)|(^\d+\.\d+$)|[,.]/
,但可以添加多个点:
$('.float_input').live("keypress",function(){inputControl($(this),'double');}); function inputControl(input,format) { var value=input.val(); if (format=='int'){expression=/(^\d+$)|(^\d+\.\d+$)/;} else if (format=='double'){expression=/(^\d+$)|(^\d+\.\d+$)|[,.]/;} var values=value.split(""); var update=""; for(id in values) { if (expression.test(values[id])==true && values[id]!='') { // also replace ',' by '.' update=update+''+values[id].replace(',','.'); } } input.val(update); }
所以我有多个点或没有点,它让我坚果,因为我肯定会接近解决方案…提前感谢您的帮助。
编辑>解决方案
哎呀,感谢关于正则表达式的帮助,我找到了解决方案!
需要进行两项测试:
- 一个用于caracters测试,逐个测试
- 另一个在输入caracters时测试整个输入
这是最后的剧本,就像一朵花,我只是为你分享:
$('.numeric_input').live("keyup",function(){inputControl($(this),'int');}); $('.float_input').live("keyup",function(){inputControl($(this),'float');}); function inputControl(input,format) { var value=input.val(); var values=value.split(""); var update=""; var transition=""; if (format=='int'){ expression=/^([0-9])$/; finalExpression=/^([1-9][0-9]*)$/; } else if (format=='float') { var expression=/(^\d+$)|(^\d+\.\d+$)|[,\.]/; var finalExpression=/^([1-9][0-9]*[,\.]?\d{0,3})$/; } for(id in values) { if (expression.test(values[id])==true && values[id]!='') { transition+=''+values[id].replace(',','.'); if(finalExpression.test(transition)==true) { update+=''+values[id].replace(',','.'); } } } input.val(update); }
这个正则表达式
(/(^\d+$)|(^\d+.\d+$)|[,.]/)
应该匹配
- 每个(^ \ d + $)1111111
- 或者每个(^ \ d +。\ d + $)111111.11111
- 或逗号后跟任何字符,它可以在表达式中的任何位置。
我怀疑你的正则表达式应该注意我已经逃脱了最后一段时间。 这将匹配逗号或句点
/(^\d+[,\.]{0,1}\d{3})/
根据评论中的说明,可能正是您想要的
?。?[ – +] [0-9] * \ [0-9] +
也会奏效
注意:您可以使用Roy Osherove的Regulazy或工具Regex Buddy极大地简化您的正则表达式生活。
你想要小数点后面的任意数字位数(逗号或句号)?
出了什么问题:
/^([1-9][0-9]*|0)([\.,][0-9]+)?$/
我为+
和\.
切换了{3}
\.
为[\.,]