当输入类型="数字"?时,正则表达式验证是否有效

时间:2014-05-15 09:15:17

标签: javascript regex html5 browser input

在输入字段中使用 type="number" 时,正则表达式验证似乎不起作用。

<input type="number" step="any" min="0" max="24" value="0">

使用 step, min, max 进行的基于broswer的新验证按预期工作。然而,这在浏览器中并不一致吗?

http://jsfiddle.net/EkL3k/1/


问题

如何使用正则表达式对数字字段进行验证?

如果有人有信息,我也会对区分数字和文本字段的其他因素感兴趣。

备注

我发现检查空字符串会导致验证触发 IF 不符合数字字段的条件。

3 个答案:

答案 0 :(得分:1)

RegEx不起作用,因为返回的值是数字,而不是字符串。它按预期工作&#39;当您将返回的值强制为字符串格式时:

var valid = /^\d*\.?\d*$/.test(String(value));

您可能需要阅读How to get the raw value an <input type="number"> field?,因为它表示您不 来验证type=number输入。

答案 1 :(得分:1)

数字字段执行自己的验证,如果它包含非数字字符,则会自动删除该值,直到给出正确的值。您可以使用console.log(value)来查看此内容。

所以你也可以检查一个空字符串

function check(value, msg) {
  var valid = ((value != '') && /^\d*\.?\d*$/.test(value));    
  if (valid) {
      document.getElementById(msg).style.display = "none";
  } else {
      document.getElementById(msg).style.display= "inline";
  }
  return valid;
}

http://jsfiddle.net/EkL3k/6/

答案 2 :(得分:0)

添加此代码并在输入中添加ID。

$(document).ready(function() {
$("#txtboxToFilter").keydown(function (e) {
    // Allow: backspace, delete, tab, escape, enter and .
    if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 110, 190]) !== -1 ||
         // Allow: Ctrl+A
        (e.keyCode == 65 && e.ctrlKey === true) || 
         // Allow: home, end, left, right
        (e.keyCode >= 35 && e.keyCode <= 39)) {
             // let it happen, don't do anything
             return;
    }
    // Ensure that it is a number and stop the keypress
    if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) {
        e.preventDefault();
    }
});
});

http://codepen.io/anon/pen/IDEGu