我正在尝试验证表单输入值。下面的函数状态是输入的值是一个低于 150 的数字,显示错误。正常工作。但是,我想添加它。如果该值包含除数值以外的任何值和/或小于 150 的值,则显示错误...
我该如何修改?
if ($('.billboard-height').val() < 150) {
$('.sb-billboardalert').fadeIn(600);
}
我正在尝试验证表单输入值。下面的函数状态是输入的值是一个低于 150 的数字,显示错误。正常工作。但是,我想添加它。如果该值包含除数值以外的任何值和/或小于 150 的值,则显示错误...
我该如何修改?
if ($('.billboard-height').val() < 150) {
$('.sb-billboardalert').fadeIn(600);
}
我建议使用正则表达式:
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');
...
}
由于无论如何您应该在服务器端进行更彻底的验证,因此您可以只使用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。
不要忘记 parseInt() 中的 radix 参数:
if (parseInt($('.billboard-height').val(), 10) < 150) {
它可能比使用正则表达式更快。正则表达式并不以速度快而著称,但它们非常强大。对于这种情况,这可能是矫枉过正。
尝试使用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);
}
}
// 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!");
}
}
来自输入或选择的任何值都将是 javascript 中的字符串。您需要使用或parseInt()
使用运算符。如果您使用它来与类似的字符串进行比较,则可以使用>
<
==
if ($('.billboard-height').val() == "150")
如果需要支持浮点数,可以使用以下方法检查变量是否有效:
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);
}
我使用这个解决方案,我觉得它非常优雅 - 没有警报,用户实际上无法输入非数字字符。
这是 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();"/>