2

live: http://jsfiddle.net/2KRHh/3/

$('#price').keyup(function(){
        $('#price').val($('#price').val().replace('..', '.'));
})

I would like have only one dot in input. This working, but only for .. digit. If i still hold comma this not working, so i would like replace this with regular expression - if is two or more dot this should replace one more.

This should also remove dot if is in different place - for example

11.23.32 - should remove second dot.
4

5 回答 5

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用于跟踪周期匹配的次数;如果匹配了两次或更多次,它会返回一个空字符串并有效地删除句点。

于 2013-06-16T07:05:54.893 回答
0

并给你另一个选择......

$('#price').keyup(function(){
    $('#price').val($('#price').val().replace(/([^.]*\.[^.]*)\./,'$1'));
   })
于 2013-06-15T22:00:18.340 回答
0

如果按键是一个点并且值中已经至少有一个点,则将事件更改为 keydown 并停止事件。

$('#price').keydown( function(e) {
    if( e.which === 190 && $(this).val().indexOf( '.' ) !== -1 ) {
        return false;
    }
});

演示:http: //jsfiddle.net/2KRHh/9/

于 2013-06-15T21:31:29.807 回答
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);" />
于 2013-06-15T22:19:51.417 回答
-1

我不知道正则表达式是否是解决此问题的最佳方法。

http://jsfiddle.net/2KRHh/4/

或相关代码:

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);

代码找到第一个点并保存它的位置,然后用空字符串替换其余的点。

于 2013-06-15T20:52:17.373 回答