jQuery验证,仅限数值

时间:2013-03-05 23:52:09

标签: javascript jquery

我正在尝试验证表单输入值。以下函数状态是输入值是低于150的数字,显示错误。按预期工作。但是,我想补充一下。如果值包含除数字值以外的任何值且AND / OR值小于150,则显示错误...

我该如何修改?

if ($('.billboard-height').val() < 150) {
    $('.sb-billboardalert').fadeIn(600);
}

9 个答案:

答案 0 :(得分:2)

由于您应该在服务器端进行更彻底的验证,因此您可以使用parseIntparseFloat,具体取决于您期望的值。然后检查结果是否实际上是一个数字,并且它也符合您的约束条件:

var number = parseFloat($('.billboard-height').val()); // or parseInt depending on expected input
if (isNaN(number) || number < 150) {
    $('.sb-billboardalert').fadeIn(600);
}

修改

根据您的评论,您正在进入正则表达式土地。我收集你只想要一个自然数(并且parseInt / parseFloat忽略拖尾非数字字符如px,em等的方式不行)。怎么样:

var val = $('.billboard-height').val();
var number = parseInt(val, 10);
if ( ! val.match(/^[0-9]{3,4}$/) || number < 150) {
    $('.sb-billboardalert').fadeIn(600);
}

这应该只允许自然数150-9999。

答案 1 :(得分:1)

我建议使用正则表达式:

var intRegex = /^\d+$/;
var floatRegex = /^((\d+(\.\d *)?)|((\d*\.)?\d+))$/;

var str = $('#myTextBox').val();
if(intRegex.test(str) || floatRegex.test(str)) {
   alert('I am a number');
   ...
}

根据@Platinum Azure的建议使用单个正则表达式:

var numberRegex = /^[+-]?\d+(\.\d+)?([eE][+-]?\d+)?$/;
var str = $('#myTextBox').val();
if(numberRegex.test(str)) {
   alert('I am a number');
   ...
}    

参考:checking if number entered is a digit in jquery

答案 2 :(得分:1)

不要忘记parseInt()中的radix参数:

if (parseInt($('.billboard-height').val(), 10) < 150) {

它可能比使用正则表达式更快。正则表达式不是很快,但它们非常强大。这种情况可能有点过头了。

答案 3 :(得分:0)

您可以试用HTML5's built in form validation

<input type="number" min="150">

browser support is still pretty shakey though

答案 4 :(得分:0)

尝试 parseInt isNaN 功能,以检查值是否为数字且小于150

var intVal = parseInt($('.billboard-height').val());
if(!isNaN(intVal)){ //not Number
    if (parseInt($('.billboard-height').val()) < 150) { //not less than 150
        $('.sb-billboardalert').fadeIn(600);
    }
}

答案 5 :(得分:0)

// Displays an alert if s contains a non-numeric character.

function alertForNonNumeric(s) {
    var rgx = /[^0-9]/;
    if (s.search(rgx) !== -1) {
        alert("Input contains non-numeric characters!");
    }
}

JS Fiddle here

注意:如果您还要检查否定的整数,可以在正则表达式中添加一个减号:

function alertForNonNumeric(s) {
    var rgx = /[^0-9-]/;
    if (s.search(rgx) !== -1) {
        alert(s + " contains non-numeric characters!");
    }
}

答案 6 :(得分:0)

来自输入或选择的任何值都将是javascript中的字符串。您需要使用parseInt()来使用><等运算符。如果您使用==if ($('.billboard-height').val() == "150")

之类的字符串进行比较,则可以使用{{1}}

答案 7 :(得分:0)

如果需要支持浮点数,可以使用以下方法检查变量是否有效:

function isNumber (n) {
    return !isNaN(parseFloat(n)) && isFinite(n);
}

var val = $('.billboard-height').val();
if (isNumber(val) && parseFloat(val) < 150) {
    $('.sb-billboardalert').fadeIn(600);
}

如果您只需要支持整数,请使用parseInt(n, 10),其中10是将字符串转换为的基础。

var val = parseInt($('.billboard-height').val(), 10);
if (val && val < 150) {
    $('.sb-billboardalert').fadeIn(600);
}

答案 8 :(得分:0)

我使用此解决方案,我发现它非常优雅 - 没有警报,用户实际上无法输入非数字字符。

这是jQuery示例:

function digitsOnly(){
    // extract only numbers from input    
    var num_val = $('#only_numbers').val().match(/\d+/);
         $('#only_numbers').val(num_val);
    } 

你的HTML:

<input type="text" name="only_numbers" id="only_numbers" on oninput="digitsOnly();"/>