用正则表达式替换前导0

时间:2013-11-12 19:59:38

标签: javascript jquery regex

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

这是我的代码

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 个答案:

答案 0 :(得分: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)检索输入的值并使其成为正则表达式chek的一部分:

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

。 。 。变成了,这个:

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

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

话虽如此。 。

这也会阻止所有非数字字符。 。 。包括“退格”和“删除”(更不用说,箭头键,“主页”,“结束”等),这意味着一旦用户输入值,用户就无法再更改值,而无需使用右键 - 单击鼠标菜单(或添加其他验证以允许那些您仍希望运行的控制键值。)

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

答案 1 :(得分:1)

你可以试试这个没有正则表达式也是这样的:

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

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

<强> JSFIDDLE

答案 2 :(得分: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

答案 3 :(得分:0)

为了记录这个工作

<input type="text" onblur="this.value=this.value.replace(/^0+/, '')">