Как проверить введенный пользователем десятичный разделитель в текстовом поле с помощью jquery - PullRequest
0 голосов
/ 13 февраля 2012

У меня есть номер формата плагина. И я хочу улучшить это. Если пользователь ввел один десятичный разделитель в текстовое поле, пользователь не вводит "," или "." в текстовое поле.

например: не разрешать ввод пользователя 11111,55 ,,. 44 .. -> разрешать ввод пользователя: 11111,5554455

Вот мой плагин:

 $.fn.myPlugin = function(options)
{
    options = $.extend({}, {
        thousands: '.',
        decimal: ','
    }, options);

    this.keyup(function()
    {
        $(this).val(function(el, val)
        {
            val = val.replace(/[^\d.,]/g, '').split(options.decimal);
            val[0] = val[0].replace(options.decimal === '.' ? /,/g : /\./g, '');
            val[0] = val[0].replace(/(\d)(?=(\d{3})+$)/g, "$1" + options.thousands);
            return val.join(options.decimal);

        });
    });
};

Ответы [ 3 ]

1 голос
/ 13 февраля 2012

Полагаю, это то, что вы ищете.Всякий раз, когда вы вводите более одного периода или запятой, он просто удаляет его.

$('input').keyup(function(){
    var value = $(this).val(),
        patt = /(,.*?,|\..*?\.)/;
    if (patt.test(value)) { $(this).val(value.slice(0, -1)); }
});

http://jsfiddle.net/elclanrs/t8G2q/4/

0 голосов
/ 13 февраля 2012

@ minh, если вы просто хотите проверить, что есть только один "," или "." во введенном числе вы можете просто сделать что-то вроде:

val.match(/^\d+([.,]\d+)?$/)

Возможно, я неправильно понял, что именно вы хотите проверить. Если это так, пожалуйста, оставьте комментарий.

0 голосов
/ 13 февраля 2012

Не уверен, что я понимаю, что вы ищете, но вот плохо написанный пример, сделанный в спешке, чтобы просто показать, как вы можете сделать что-то подобное с помощью итерации:

$("#test").on('keyup', function() {
    var V = $(this).val().split(''), A=[], L=V.length;
    for (var i=0; i<L; i++) {
        var E=V[i];
        if (E=='.' && A.indexOf(E)!=-1) {}else{A.push(E);}
        var Q=A.join('');
    }
    $(this).val(Q);
});

Здесь есть скрипка за попытку?

...