我想使用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)
{
}
})
});
});
答案 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是否介于&gt; = 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
}