-1

我想使用 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)
            {


            }
        })
    });
});
4

3 回答 3

1

请注意,您使用 JavaScript(使用或不使用 jQuery)进行的任何验证都应该在您的 PHP 代码中重复(显然语法不会相同),因为您永远无法完全相信浏览器提交的内容(用户可能已经使用开发工具绕过您的客户端验证)。

话虽如此,要回答有关如何使用 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"到有问题的输入元素中,这样用户就不能输入两个以上的字符。

于 2013-07-14T15:26:19.503 回答
1

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

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

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

如果它是浮点数(表示十进制),则可以通过执行以下操作将其简单地更改为整数

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

接下来,您只需检查 Qty 是否在 >= 1 和 <= 99 之间

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

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

于 2013-07-14T17:56:38.850 回答
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
}
于 2013-07-14T15:35:44.597 回答