检查数字和连字符的输入字段

时间:2014-07-26 16:31:55

标签: jquery

我只想检查输入值是否为数字和/或两个数字之间是否有连字符。逗号应该用点(1,23 - > 1.23)代替,空格应该删除。

允许值即:。

1
2
1-2
34-45

不允许:

-2
1-
-
any letters

我的尝试:

$('form').submit(function( event ) {
    $('input').each(function(index, element) {
    $(element).val($(element).val().replace(",", ".").replace(" ", "")); // replace comma, delete spaces
    if (!$.isNumeric($(element).val())) {
        alert("error");
        event.preventDefault();
    }
    // else submit
});

我认为isNumeric是错误的方式,因为'12 -5'应该是一个有效的值......

2 个答案:

答案 0 :(得分:2)

首先要做的是用,替换.并删除空格。这可以通过以下方式完成:

var input = "1 2 3. 4 - 56,78"; input.replace(/ /g,"").replace(/,/g,".")

然后你必须申请正则表达式:

/^\d+(\.\d+|\d*)(-?\d+(\.\d+|\d*)|\d*)$/

小提琴:http://jsfiddle.net/y5ACh/1/

正则表达式解释:http://www.regexr.com/397j6

忘记提及 - 我认为像.2-31这样的字符串无效($.isNumeric(".2")返回true,因此我们无法在{{1}之前和之后使用$.isNumeric }})


要使浮动无效,您需要放弃-组:http://jsfiddle.net/y5ACh/2/

要使整数无效,您需要删除(\.\d+|\d*)组:http://jsfiddle.net/y5ACh/3/

答案 1 :(得分:1)

$('input').each(function(index, element) {
    $(element).val($(element).val().replace(",", ".").replace(" ", "")); // replace comma, delete spacesis).val());
    //alert($(this).val());
    if (!$.isNumeric($(element).val())) {
        alert("error");
        event.preventDefault();
    }
});

演示:

http://jsfiddle.net/y9Tpa/