禁用零作为<input />中的第一个字母

时间:2015-09-16 17:25:47

标签: javascript jquery

以下代码禁用0作为#foo中的第一个字符 但是,您可以通过键入123来绕过此操作,然后拖动以选择123并放置0。 (或ctrl+a输入)

有没有办法阻止这种情况?

&#13;
&#13;
 $('input#foo').keypress(function(e){ 
  if (this.value.length == 0 && e.which == 48 ){
   return false;
   }
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="foo" />
&#13;
&#13;
&#13;

7 个答案:

答案 0 :(得分:9)

我会处理输入,属性更改和粘贴事件。然后使用正则表达式匹配任何以0开头的内容,并将当前值替换为减去前导0的值。

http://jsfiddle.net/SeanWessell/5qxwpv6h/

$('input ').on('input propertychange paste', function (e) {
    var val = $(this).val()
    var reg = /^0/gi;
    if (val.match(reg)) {
        $(this).val(val.replace(reg, ''));
    }
});

Kevin报告错误修复/根据佳能推荐更新:

http://jsfiddle.net/SeanWessell/5qxwpv6h/2/

$('input').on('input propertychange paste', function (e) {
    var reg = /^0+/gi;
    if (this.value.match(reg)) {
        this.value = this.value.replace(reg, '');
    }
});

答案 1 :(得分:2)

这可行:

:set nolist

使用此解决方案唯一困扰您的是零显示一秒然后删除,因为我们正在使用$('input#foo').keyup(function(e) { if((this.value+'').match(/^0/)) { this.value = (this.value+'').replace(/^0+/g, ''); } }); 事件。

A quick demo

答案 2 :(得分:1)

我认为你正在寻找keydown jQuery事件而不是keypress事件。 Here's有些人会提供有关两者之间差异的信息。尝试正则表达式摆脱前导零:

$('input#foo').keydown(function(e){ 
    this.value = this.value.replace(/^0+/, '');
});

答案 3 :(得分:1)

这是固定版本:

<input id="foo" />

$('input#foo').keyup(function(e){ 
     if(this.value.substring(0,1) == "0")
     {
        this.value = this.value.replace(/^0+/g, '');             
     }         
});

jsfiddle:http://jsfiddle.net/ewmb1yq9/4/

答案 4 :(得分:1)

仅接受不带前缀的数字值。支持 Ctrl + A

&#13;
&#13;
var escapeKeys = [8, 46];
$('input#foo').keyup(function (e) {
    if ($.inArray(e.keyCode, escapeKeys) != 0) {
        if ((this.value + String.fromCharCode(e.keyCode)).match(/^[1-9][0-9]*$|^$/) != null) {
            this.lastValidValue = this.value + String.fromCharCode(e.keyCode);
        } else if (this.lastValidValue) {
            this.value = this.lastValidValue;
        } else {
            this.value = "";
        }
    } else {
        this.lastValidValue = this.value;
    }
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="foo" />
&#13;
&#13;
&#13;

答案 5 :(得分:0)

如果要捕获输入值的更改(例如,通过拖动部分文本所做的更改),您可以观看input事件。

$('input#foo').on("input", function(){
  alert($(this).val());
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="foo" />

答案 6 :(得分:0)

你可以添加一个“提交”事件来验证它是否已输入,无论它是如何进入的:

$( "form" ).submit(function( event ) {
  if ( $( "input:first" ).val() != 0 ) {
    $( "span" ).text( "Validated..." ).show();
    return;
  }
  $( "span" ).text( "Not valid!" ).show().fadeOut( 1000 );
  event.preventDefault();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>


<p>Type 'Anything but 0' to validate.</p>
<form action="javascript:alert( 'success!' );">
  <div>
    <input type="text">
    <input type="submit">
  </div>
</form>
<span></span>
 

jQuery的工作示例是最后一页(https://api.jquery.com/submit/

注意:最重要的部分是添加“event.preventDefault()”操作,因为这会使表单不会意外提交。