输入类型=“数字”时,正则表达式验证是不是有效?

Posted

技术标签:

【中文标题】输入类型=“数字”时,正则表达式验证是不是有效?【英文标题】:Does regex validation work when input type="number"?输入类型=“数字”时,正则表达式验证是否有效? 【发布时间】:2014-07-03 15:35:16 【问题描述】:

在输入字段上使用 type="number" 时,regex 验证似乎不起作用。

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

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

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


问题

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

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

注意事项

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

【问题讨论】:

您始终可以通过 keyup 上的脚本调用您的验证。或者只是设置删除 type=number 并仅使用正则表达式。 感谢您的提示。按键没有区别,我需要设备键盘的类型号。 您可以使用element.validity.valid 来检查输入是否包含有效数字。还有一个pattern 属性,您可以在其中设置一个正则表达式来验证您的输入。最后,您可以使用 keypress 防止用户输入除数字以外的其他内容:***.com/a/15649226/2806497 顺便说一句,对这些新输入要谨慎,它们并没有在所有浏览器中完全实现(例如,Firefox 在上次更新中添加了对它的支持)。我不建议在生产环境中使用它。 正是这就是为什么我使用正则表达式验证器来确保完全支持。我不能依赖浏览器内置的号码验证。 【参考方案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】:

RegEx 不起作用,因为返回的值是一个数字,而不是一个字符串。当您将返回值强制为字符串格式时,它会“按预期”工作:

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

您可能想阅读How to get the raw value an <input type="number"> field?,因为它表明您没有验证type=number 输入。

【讨论】:

这是真的,但并非所有浏览器都能正常运行,验证不会是一致的,正则表达式验证器会阻止我也需要的数据提交。 在你的小提琴中改变了这一行之后它对我有用。 ..?【参考方案3】:

添加此代码并在您的输入中添加一个 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

【讨论】:

以上是关于输入类型=“数字”时,正则表达式验证是不是有效?的主要内容,如果未能解决你的问题,请参考以下文章

asp.net怎么限制文本框输入的类型c#

常用的JQuery数字类型验证正则表达式整理

js正则表达式 判断输入框是不是为正整数或者正整数保留两位小数

python使用正则表达式验证用户输入密码的有效性

常用正则表达式

求JS的判断输入数字必须为正整数的正则表达式