Маска ввода для числовых и десятичных чисел

Я понял управление программным приложением выставления счетов после тестирования моей программы я заметил следующую ошибку: моя таблица в sqlserver содержит: цена числовая (6,2) пользователь моей программы вводит цену как 555.00 хорошо. но когда он поставил 555555 это ошибка, поэтому мне нужно указать маску, где мантисса необязательна от 0 до 999, а десятичная часть программируется 2 или 3 по выбору пользователя, я использую jQuery Masked input plugin, и я не нашел хорошего регулярного выражение, пожалуйста, помогите, я работаю с JSP / servlet.

6 ответов


можно использовать jQuery с числовыми для чисел.
Текущая версия позволяет то, что вы ищете, но у кого-то есть изменить код немного и она работает:

HTML-код

<input class="numeric" type="text" />

в JavaScript

$(".numeric").numeric({ decimal : ".",  negative : false, scale: 3 });

Это все источник.
И я подготовил это скрипка так что вы можете увидеть, как это работает.


использование плагина маски ввода jQuery (6 целых и 2 десятичных знака):

HTML-код:

<input class="mask" type="text" />

jQuery:

$(".mask").inputmask('Regex', {regex: "^[0-9]{1,6}(\.\d{1,2})?$"});

надеюсь, это кому-то поможет


Вы можете сделать это с помощью jQuery свойство маска ввода плагин.

HTML-код:

<input id="price" type="text">

Javascript:

$('#price').inputmask({alias: 'numeric', 
                       allowMinus: false,  
                       digits: 2, 
                       max: 999.99});

или

<input type="text" onkeypress="handleNumber(event, '€ {-10,3} $')" placeholder="€  $" size=25>

С

function handleNumber(event, mask) {
    /* numeric mask with pre, post, minus sign, dots and comma as decimal separator
        {}: positive integer
        {10}: positive integer max 10 digit
        {,3}: positive float max 3 decimal
        {10,3}: positive float max 7 digit and 3 decimal
        {null,null}: positive integer
        {10,null}: positive integer max 10 digit
        {null,3}: positive float max 3 decimal
        {-}: positive or negative integer
        {-10}: positive or negative integer max 10 digit
        {-,3}: positive or negative float max 3 decimal
        {-10,3}: positive or negative float max 7 digit and 3 decimal
    */
    with (event) {
        stopPropagation()
        preventDefault()
        if (!charCode) return
        var c = String.fromCharCode(charCode)
        if (c.match(/[^-\d,]/)) return
        with (target) {
            var txt = value.substring(0, selectionStart) + c + value.substr(selectionEnd)
            var pos = selectionStart + 1
        }
    }
    var dot = count(txt, /\./, pos)
    txt = txt.replace(/[^-\d,]/g,'')

    var mask = mask.match(/^(\D*)\{(-)?(\d*|null)?(?:,(\d+|null))?\}(\D*)$/); if (!mask) return // meglio exception?
    var sign = !!mask[2], decimals = +mask[4], integers = Math.max(0, +mask[3] - (decimals || 0))
    if (!txt.match('^' + (!sign?'':'-?') + '\d*' + (!decimals?'':'(,\d*)?') + '$')) return

    txt = txt.split(',')
    if (integers && txt[0] && count(txt[0],/\d/) > integers) return
    if (decimals && txt[1] && txt[1].length > decimals) return
    txt[0] = txt[0].replace(/\B(?=(\d{3})+(?!\d))/g, '.')

    with (event.target) {
        value = mask[1] + txt.join(',') + mask[5]
        selectionStart = selectionEnd = pos + (pos==1 ? mask[1].length : count(value, /\./, pos) - dot) 
    }

    function count(str, c, e) {
        e = e || str.length
        for (var n=0, i=0; i<e; i+=1) if (str.charAt(i).match(c)) n+=1
        return n
    }
}

^[0-9]{1,14}\.[0-9]{2}$ и если он не соответствует, сделайте фон красным или покажите текст или что угодно. Вот код для ввода в документ.готов

$(document).ready(function() {
    $('selectorForTextbox').bind('keyup', function(e) {
        if (e.srcElement.value.match(/^[0-9]{1,14}\.[0-9]{2}$/) === null) {
            $(this).addClass('invalid');
        } else {
            $(this).removeClass('invalid');
        }
    });
});

здесь JSFiddle этого в действии. Кроме того, сделайте ту же сторону сервера регулярных выражений, и если она не соответствует, требования не были выполнены. Вы также можете сделать это проверьте событие onsubmit и не позволяйте пользователю отправлять страницу, если регулярное выражение не совпадает.

причина, по которой маска не применяется при вставке текста, заключается в том, что она сильно усложняет ситуацию, например, как я упоминал в комментарии, пользователь не может начать вводить допустимый ввод, так как начало его недействительно. Это возможно, но я предлагаю вместо этого.


попробовать imaskjs. Он имеет номер, RegExp и другие маски. Очень просто расширить.