2

我正在尝试验证表单输入值。下面的函数状态是输入的值是一个低于 150 的数字,显示错误。正常工作。但是,我想添加它。如果该值包含除数值以外的任何值和/或小于 150 的值,则显示错误...

我该如何修改?

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

9 回答 9

2

我建议使用正则表达式:

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');
   ...
}    

参考:检查输入的数字是否是 jquery 中的数字

于 2013-03-05T23:54:37.067 回答
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。

于 2013-03-06T00:16:44.960 回答
1

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

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

它可能比使用正则表达式更快。正则表达式并不以速度快而著称,但它们非常强大。对于这种情况,这可能是矫枉过正。

于 2013-03-06T00:13:08.550 回答
0

您可以尝试HTML5 的内置表单验证

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

浏览器支持仍然很不稳定

于 2013-03-05T23:56:43.930 回答
0

尝试使用parseIntisNaN函数检查值是否为数字且小于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);
    }
}
于 2013-03-06T00:07:46.340 回答
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小提琴在这里

注意:如果您还想检查负整数,可以在正则表达式中添加减号:

function alertForNonNumeric(s) {
    var rgx = /[^0-9-]/;
    if (s.search(rgx) !== -1) {
        alert(s + " contains non-numeric characters!");
    }
}
于 2013-03-06T00:09:38.130 回答
0

来自输入或选择的任何值都将是 javascript 中的字符串。您需要使用或parseInt()使用运算符。如果您使用它来与类似的字符串进行比较,则可以使用><==if ($('.billboard-height').val() == "150")

于 2013-03-06T00:12:02.750 回答
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);
}
于 2013-03-06T00:17:13.580 回答
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();"/>
于 2014-05-30T07:28:44.480 回答