直播:http://jsfiddle.net/2KRHh/3/
$('#price').keyup(function(){
$('#price').val($('#price').val().replace('..', '.'));
})
我想在输入中只有一个点。这工作,但只适用于..数字。如果我仍然使用逗号这不起作用,所以我想用正则表达式替换它 - 如果是两个或更多点这应该替换一个。
如果在不同的地方,这也应该删除点 - 例如
11.23.32 - should remove second dot.
答案 0 :(得分:2)
如果你想独自离开第一个时期并删除其他时期,表达式很简单:
/\./g
它基本上匹配所有时期;那么我们如何确保只匹配第二,第三等?很简单,您可以在替换功能中进行管理:
var $price = $('#price'),
new_str = function(str) {
var i = 0;
return str.replace(/\./g, function() {
return ++i >= 2 ? '' : '.';
});
}($price.val());
$price.val(new_str);
变量i
用于跟踪周期匹配的次数;如果它匹配了两次或更多次,则返回一个空字符串并有效地删除句点。
答案 1 :(得分:0)
将事件更改为keydown,如果按键是一个点并且值中至少有一个点,则停止事件。
$('#price').keydown( function(e) {
if( e.which === 190 && $(this).val().indexOf( '.' ) !== -1 ) {
return false;
}
});
答案 2 :(得分:0)
并给你另一个选择.....
$('#price').keyup(function(){
$('#price').val($('#price').val().replace(/([^.]*\.[^.]*)\./,'$1'));
})
答案 3 :(得分:0)
您永远不应该限制用户输入他们想要输入的内容。验证时,您应该显示某种警告或在键入完成后自动更正。
因此,试试这个:
<input type="number" min="0" step="0.01" />
因为令人惊讶的是,浏览器是血腥强大的系统,不需要用勺子喂食所有东西;)
但是,如果兼容性是一个主要问题(注意:它不应该是,因为你永远不应该信任客户端输入并始终在服务器上验证),试试这个:
<input type="number" min="0" step="0.01"
onChange="this.value=Math.max(0,Math.floor((parseFloat(this.value)||0)*100)/100);" />
答案 4 :(得分:-1)
我不知道正则表达式是否是解决此问题的最佳方法。
或相关代码:
var str = $('#old').val();
var dot = str.indexOf('.');
var newstr = str.substring(0, dot) + '.' + str.substring(dot).replace('.', '', 'g');
console.log(str, newstr);
$('#new').val(newstr);
代码找到第一个点并保存其位置,然后用空字符串替换其余的点。