两个或多个点的正则表达式

时间:2013-06-15 20:39:34

标签: javascript jquery html regex

直播:http://jsfiddle.net/2KRHh/3/

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

我想在输入中只有一个点。这工作,但只适用于..数字。如果我仍然使用逗号这不起作用,所以我想用正则表达式替换它 - 如果是两个或更多点这应该替换一个。

如果在不同的地方,这也应该删除点 - 例如

11.23.32 - should remove second dot.

5 个答案:

答案 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;
    }
});

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

答案 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)

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

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

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