我正在尝试验证表单输入值。以下函数状态是输入值是低于150的数字,显示错误。按预期工作。但是,我想补充一下。如果值包含除数字值以外的任何值且AND / OR值小于150,则显示错误...
我该如何修改?
if ($('.billboard-height').val() < 150) {
$('.sb-billboardalert').fadeIn(600);
}
答案 0 :(得分:2)
由于您应该在服务器端进行更彻底的验证,因此您可以使用parseInt或parseFloat,具体取决于您期望的值。然后检查结果是否实际上是一个数字,并且它也符合您的约束条件:
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');
...
}
答案 2 :(得分:1)
不要忘记parseInt()中的radix参数:
if (parseInt($('.billboard-height').val(), 10) < 150) {
它可能比使用正则表达式更快。正则表达式不是很快,但它们非常强大。这种情况可能有点过头了。
答案 3 :(得分:0)
您可以试用HTML5's built in form validation:
<input type="number" min="150">
答案 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!");
}
}
注意:如果您还要检查否定的整数,可以在正则表达式中添加一个减号:
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")
答案 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();"/>