【问题标题】:How to allow only one decimal separator in the texbox?如何在文本框中只允许一个小数分隔符?
【发布时间】:2012-03-11 00:56:01
【问题描述】:

我有插件。 您可以在上看到演示: http://jsfiddle.net/nangvabien/8Uuvb/

如果小数分隔符 = "," 或 "." ,用户在文本框中输入:1000000,,,,...5 --> 格式:1.000.000,5 或 12300000.,,..5 --> 格式 12,300,000.5

我只想使用小数分隔符。请帮我改进插件 FormatNummer。

【问题讨论】:

    标签: jquery jquery-plugins number-formatting


    【解决方案1】:

    我做了一些可以帮助你的事情: Live control a float input with a regex mask

    $('.numeric_input').live("keyup",function(){inputControl($(this),'int');});
    $('.float_input').live("keyup",function(){inputControl($(this),'float');});
    
    function inputControl(input,format) 
    { 
        var value=input.val();
        var values=value.split("");
        var update="";
        var transition="";
        if (format=='int'){
            expression=/^([0-9])$/;
            finalExpression=/^([1-9][0-9]*)$/;
        }
        else if (format=='float')
        {
            var expression=/(^\d+$)|(^\d+\.\d+$)|[,\.]/;
            var finalExpression=/^([1-9][0-9]*[,\.]?\d{0,3})$/;
        }   
        for(id in values)
        {           
            if (expression.test(values[id])==true && values[id]!='')
            {
                transition+=''+values[id].replace(',','.');
                if(finalExpression.test(transition)==true)
                {
                    update+=''+values[id].replace(',','.');
                }
            }
        }
        input.val(update);
    }
    

    你可以在这里看到它:http://jsfiddle.net/8Uuvb/1/

    【讨论】:

    • 你好瓦尔基。您的代码是文本框中的控制输入,但我不知道如何将我的代码(这里是我的代码 jsfiddle.net/nangvabien/8Uuvb)添加到插件 FormatNumber 对。
    • 对不起,我不明白你真正想要做什么,为什么想要它,以及它最终会做什么。我的帖子回答了你的标题问题。这个表达式 /^([1-9][0-9]*[,\.]?\d{0,3})$/ 只允许一个小数点分隔符和 3 个小数点后。
    【解决方案2】:

    这是我对带有fiddle 的十进制文本字段的解决方案。它适用于负数和复制/粘贴。

    $('input').bind('paste', function () {
        var self = $(this);
        var orig = self.val();
        setTimeout(function () {
            var pasted = getTextDiff(orig, $(self).val());
            if(isNaN(Number($(self).val())))
                $(self).val($(self).val().replace(pasted, ''));
            console.log(pasted);
        });
    });
    $("input").keypress(function (event) {
        var inputCode = event.which;
        var currentValue = $(this).val();
        if (inputCode > 0 && (inputCode < 48 || inputCode > 57)) {
            if (inputCode == 46) {
                if (getCursorPosition(this) == 0 && currentValue.charAt(0) == '-') return false;
                if (currentValue.match(/[.]/)) return false;
            } 
            else if (inputCode == 45) {
                if (currentValue.charAt(0) == '-') return false;
                if (getCursorPosition(this) != 0) return false;
            } 
            else if (inputCode == 8) return true;
            else return false;
    
        } 
        else if (inputCode > 0 && (inputCode >= 48 && inputCode <= 57)) {
            if (currentValue.charAt(0) == '-' && getCursorPosition(this) == 0) return false;
        }
    });
    function getCursorPosition(element) {
        if (element.selectionStart) return element.selectionStart;
        else if (document.selection)
        {
            element.focus();
            var r = document.selection.createRange();
            if (r == null) return 0;
    
            var re = element.createTextRange(),
                rc = re.duplicate();
            re.moveToBookmark(r.getBookmark());
            rc.setEndPoint('EndToStart', re);
            return rc.text.length;
        }
        return 0;
    }
    function getTextDiff(first, second) {
        var start = 0;
        while (start < first.length && first[start] == second[start]) {
            ++start;
        }
        var end = 0;
        while (first.length - end > start && first[first.length - end - 1] == second[second.length - end - 1]) {
            ++end;
        }
        end = second.length - end;
        return second.substr(start, end - start);
    }
    

    【讨论】:

      猜你喜欢
      • 2014-02-15
      • 1970-01-01
      • 1970-01-01
      • 2023-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多