-1

我试图阻止用户输入 0 作为第一个数字。

这是我有atm的代码

function validate_numberonly(evt)
{
    var theEvent = evt || window.event;
    var key = theEvent.keyCode || theEvent.which;
    key = String.fromCharCode( key );
    var regex = /[0-9]|\./;
    if( !regex.test(key) ) {
        theEvent.returnValue = false;
        theEvent.preventDefault();
    } 
}

允许这样做的正则表达式是replace(/[^0-9]/g,'');但是输入这个而不是当前的正则表达式似乎不起作用

4

4 回答 4

2

尝试这个:

/^[1-9]\d*$/

此检查将确保第一个字符是除“0”之外的任何数字,然后是零个或多个任何数字。

这种模式需要与您所拥有的略有不同的方法。key您不想检查值,而是要对整个字段值进行测试。如果当前按键破坏了模式匹配,它将阻止将关联的字符添加到值中。

仅允许添加添加继续匹配模式的字符的击键。在这种情况下,模式分解为:

  • ^- 值的开始
  • [1-9]- 只允许一个字符,只允许数字 1 到 9
  • \d*- 零个或多个任意数字(即 0 到 9)
  • $- 值的结束

更新:

现在我已经了解了您是如何绑定它的,您应该能够进行一些更新以使其正常工作。首先,您需要传递验证绑定到的元素。. . 所以,在你的 HTML 中,改变这个:

onkeypress='validate_numberonly(event)'

. . . 对此:

onkeypress='validate_numberonly(this, event)'

然后,在您的 JS 中,您需要进行两项更改:1) 接受新参数,以及 2) 检索输入的值并使其成为正则表达式检查的一部分:

function validate_numberonly(evt) {
    . . .
if( !regex.test(key) ) {
    . . .

. . . 变成,这:

function validate_numberonly(el, evt) {
    . . .
if( !regex.test(el.value + key) ) {
    . . .

现在,代码将只排除创建与正则表达式模式匹配的值的数字值。

话虽如此 。. .

这也会阻止所有非数字字符。. . 包括“Backspace”和“Delete”(更不用说箭头键、“Home”、“End”等),意思是用户一旦输入了一个值,就不能再改变一个值,而无需使用右键-单击他们的鼠标菜单(或添加额外的验证以允许您希望仍然起作用的那些控制键值)。

onchange将我提供的正则表达式用作由事件触发的“最终值”检查,并提供某种错误消息,提示用户仅输入数字,没有前导“0”,这确实更有意义“s。

于 2013-11-12T20:03:53.783 回答
1

你也可以在没有正则表达式的情况下尝试这个:

$('input').keypress(function(e){ 
   if (this.value.length == 0 && e.which == 48 ){
      return false;
   }
});

这将不允许用户输入零作为第一个数字。

JSFIDDLE

于 2013-11-12T20:02:06.080 回答
0

为了记录,这有效

<input type="text" onblur="this.value=this.value.replace(/^0+/, '')">
于 2013-11-13T09:00:06.750 回答
0

您是否尝试过读取按键 ascii 值并进行测试?

说,类似的东西;

//when key is pressed in the textbox$("#quantity").keypress(function (e)
{
  //if the letter is not digit then display error and don't type anything
   if( e.which!=8 && e.which!=0 && (e.which<48 || e.which>57))
   {
    //display error message
    $("#errmsg").html("Digits Only").show().fadeOut("slow");
    return false;

} });

调整上面的例子来检测 '0' ascii 字符代码可能比使用正则表达式更简单。您可以测试当前文本框字符串的长度,如果它大于 1,则退出该函数。

代码示例来自:http ://roshanbh.com.np/2008/04/textbox-accept-only-numbers-digits.html

于 2013-11-12T20:06:03.220 回答