【问题标题】:Javascript limit text field to positive and negative numbersJavascript将文本字段限制为正数和负数
【发布时间】:2012-11-08 13:27:51
【问题描述】:

在 javascript 中有一种方法可以让用户在文本字段 (input type="text") 中只输入数字,但可以选择在它们前面加上减号? (即只有负数和正数)

【问题讨论】:

    标签: javascript regex


    【解决方案1】:
    <input type='text' onkeypress='return numbersOnly(this,event,false,true);'>
    
    function numbersOnly(Sender,evt,isFloat,isNegative) {
                if(Sender.readOnly) return false;       
    
                var key   = evt.which || !window.event ? evt.which : event.keyCode;
                var value = Sender.value;
    
                if((key == 46 || key == 44) && isFloat){                
                    var selected = document.selection ? document.selection.createRange().text : "";
                    if(selected.length == 0 && value.indexOf(".") == -1 && value.length > 0) Sender.value += ".";
                    return false;
                }
                if(key == 45) { // minus sign '-'
                    if(!isNegative) return false;
                    if(value.indexOf('-')== -1) Sender.value = '-'+value; else Sender.value = value.substring(1);
                    if(Sender.onchange != null) {
                        if(Sender.fireEvent){
                            Sender.fireEvent('onchange');
                        } else {
                            var e = document.createEvent('HTMLEvents');
                                e.initEvent('change', false, false);
                            Sender.dispatchEvent(e);
                        }
                    }
    
                    var begin = Sender.value.indexOf('-') > -1 ? 1 : 0;
                    if(Sender.setSelectionRange){
                        Sender.setSelectionRange(begin,Sender.value.length);
                    } else {
                        var range = Sender.createTextRange();
                        range.moveStart('character',begin);
                        range.select();                 
                    }
    
                    return false;
                }
                if(key > 31 && (key < 48 || key > 57)) return false;
            }
    

    相关问题:HTML Text Input allow only Numeric input

    【讨论】:

      【解决方案2】:

      您可以将侦听器(即在 javascript 中)绑定到 onKeyUp 事件(或最适合您需要的事件)并检查用户尝试插入的内容。然后你可以决定是否让他插入那个字符。

      注意:您还需要控制复制/粘贴事件,因为用户可以粘贴一些文本而不是编写它!

      【讨论】:

        【解决方案3】:

        使用这个。它有效。

        https://raw.github.com/SamWM/jQuery-Plugins/master/numeric/jquery.numeric.js

        $(document).ready(function(){
            $(".numeric").numeric({negative :true});
        });​
        

        【讨论】:

          【解决方案4】:

          试试下面的正则表达式:

          /^-?\d+$/
          

          【讨论】:

          • 正则表达式的问题是我将它与函数replace一起使用,该函数逐字母控制输入,我冒着接受4-53这样的输入的风险。我希望做的控制必须在用户输入时完成,而不是像验证一样。还是谢谢你:)
          【解决方案5】:

          这是我想出的仅适用于正整数和负整数的最佳解决方案

          <input type="text" onkeyup="this.value = (this.value[0] === '-') ? ('-' + this.value.replace(/[^0-9]/g, '')) : (this.value.replace(/[^0-9]/g, ''));" pattern="^-?\d+" />
          

          你可以在这里查看http://jsfiddle.net/4g08ofz6/

           

          模式

          pattern="^-?\d+"
          

          只是在粘贴或拖入值时的额外验证层,但请记住,您仍应始终在服务器站点上进行验证

          【讨论】:

          • 前导^ 是不必要的。
          猜你喜欢
          • 1970-01-01
          • 2018-04-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-07
          • 1970-01-01
          • 2013-10-06
          相关资源
          最近更新 更多