AJAX数量验证

时间:2013-07-14 15:06:53

标签: javascript jquery ajax

我想使用Jquery进行数量验证。我想查看以下内容

1)该数字是整数

2)它不是字母

3)他们不是十进制

4)最大数量为99。

我当前的Jquery

$(document).ready(function()
{
    $('#button').click(function()
    {
        var pid = $('#pid').val();
        var length = $('#length').val();
        var Qty = $('#Qty').val(); // this is the quantity
        var Category = $('#Category').val();
        #Qty = preg_replace('#[^0-9]#i', '', $Qty); // filter everything but numbers
        if ($Qty >= 100) { $Qty = 99; }
        if ($Qty < 1) { $Qty = 1; }
        if ($Qty == "") { $Qty = 1; }

        $.ajax({
            url: 'cart.php',
            type: 'POST',

            data: { pid:pid, length:length, Qty:Qty, Category:Category },
            success: function(data)
            {


            }
        })
    });
});

3 个答案:

答案 0 :(得分:1)

请注意,您在PHP代码中重复使用JavaScript(有或没有jQuery)的任何验证(显然语法都不一样),因为您无法完全信任由浏览器(用户可能已使用开发工具绕过客户端验证)。

话虽如此,为了回答你关于如何使用jQuery进行验证的问题,给定一个变量Qty来保存用户输入,你可以测试它是否是1到99之间的整数使用以下代码:

if (!/^[1-9]\d?$/.test(Qty)){
    alert('Add meaningful error message here');
    return false;
}

我所显示的正则表达式^[1-9]\d?$允许字符串中的第一个字符是1到9之间的数字,然后是任意数字(0-9)的可选第二个字符。这适用于1到99之间的所有数字。(实际上这只是简单的JS,而不是jQuery。)

在现有代码的上下文中:

$(document).ready(function () {
    $('#button').click(function () {
        var pid = $('#pid').val();
        var length = $('#length').val();
        var Qty = $('#Qty').val(); // this is the quantity
        var Category = $('#Category').val();

        if (!/^[1-9]\d?$/.test(Qty)){
            alert('Add meaningful error message here');
            return false; // don't continue
        }    
        $.ajax({
            url: 'cart.php',
            type: 'POST',    
            data: {
                pid: pid,
                length: length,
                Qty: Qty,
                Category: Category
            },
            success: function (data) {

            }
        });
    });
});

请注意,您在问题中显示的PHP代码(后来编辑到JS中间)没有意义,因为它实际上更改了用户输入的值以强制执行它符合规则。例如,用户键入“15.0”,因此您的代码删除小数以留下“150”,然后确定它太大并使其为“99”。因此,用户认为他们已经发送了“15.0”并且您已将其更改为“99”。

另请注意,如果您知道99是允许的最大数字,那么您可以将maxlength="2"添加到相关输入元素中,这样用户就不能输入两个以上的字符。

答案 1 :(得分:1)

尝试这个,让我知道是否有效:

首先你需要检查输入是否为数字

if(isNaN(Qty))
{
   alert("Not a Number");
   return false;
}

接下来如果它是一个浮点数(意思是十进制),你可以通过执行以下操作简单地将它改为整数

Qty = parseInt(Qty); //so 1.5  becomes 1

接下来,您只需检查Qty是否介于&g​​t; = 1和&lt; = 99

之间
if(Qty < 1 || Qty > 99)
{
    alert("The number must be between 1 and 99");
    return false;
}

我希望这能满足你所​​有的条件艾米。

答案 2 :(得分:0)

通过数学运算(允许使用“0.1 E2”之类的符号等)

// cast to a number
var n = Number(Qty.replace(/^\s+/, '').replace(/\s+$/, ''));
if (!isNaN(n)) {
    // force to nearest integer in bounds
    n = Math.max( 1, Math.min( 99, Math.round(n) ) );
}
else {
    //not a number
}