20

我在测试我的程序后实现了软件应用程序管理发票我注意到以下错误:我在 sqlserver 中的表包含:价格数字(6,2)我的程序的用户输入价格为 555.00 是好的。但是当他输入 555555 这是错误的,所以我需要指定掩码,其中尾数是可选的 0 到 999,小数部分根据用户的选择可编程为 2 或 3,我使用的是 JQuery Masked 输入插件,我有没有找到好的正则表达式,请帮忙,我正在使用jsp / servlet。

4

8 回答 8

23

您可以将jquery numeric用于数字。
当前版本确实允许您要查找的内容,但是有人稍微更改了代码并且可以正常工作:

HTML

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

jQuery

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

这就是全部来源
我已经准备好了这个小提琴,所以你可以看到它是如何工作的。

于 2013-08-16T13:40:37.360 回答
12

使用 jQuery 输入掩码插件(6 个整数和 2 个小数位):

HTML:

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

jQuery:

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

我希望这可以帮助别人

于 2015-12-10T23:29:09.723 回答
7

您可以使用 jquery inputmask插件来做到这一点。

HTML:

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

Javascript:

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

https://codepen.io/vladimir-vovk/pen/BgNLgv

于 2017-08-16T15:23:52.603 回答
4

使用tow函数来解决,非常简单好用:

HTML:

<input class="int-number" type="text" />
<input class="decimal-number" type="text" />

查询:

//Integer Number
$(document).on("input", ".int-number", function (e) {
  this.value = this.value.replace(/[^0-9]/g, '');
});

//Decimal Number
$(document).on("input", ".decimal-number", function (e) {
    this.value = this.value.replace(/[^0-9.]/g, '').replace(/(\..*)\./g, '$1');
});
于 2018-12-08T07:23:07.557 回答
2

或者也

<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
    }
}
于 2018-04-08T12:35:40.747 回答
0

现在我更好地理解了您的需求,这就是我的建议。为您的文本框添加一个 keyup 处理程序,使用此正则表达式检查文本框内容,^[0-9]{1,14}\.[0-9]{2}$如果不匹配,则将背景设置为红色或显示文本或您喜欢的任何内容。这是放入 document.ready 的代码

$(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 事件,如果正则表达式不匹配,则不让用户提交页面。

在文本插入时不强制执行掩码的原因是它使事情变得复杂,例如,正如我在评论中提到的,用户无法开始输入有效输入,因为它的开头是无效的。虽然这是可能的,但我建议这样做。

于 2013-08-16T15:18:27.660 回答
0

如果您的系统是英文的,请使用@Rick 回答:

如果您的系统是巴西葡萄牙语,请使用以下命令:

进口:

<script
        src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

    <script     src="https://cdnjs.cloudflare.com/ajax/libs/jquery.mask/1.14.15/jquery.mask.min.js"></script>

    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.inputmask/3.2.6/jquery.inputmask.bundle.min.js"></script>

HTML:

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

JS:

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

这是因为在巴西葡萄牙语中我们写“1.000.000,00”而不是像英语那样写“1,000,000.00”,所以如果你使用“。” 系统不会理解小数点。

就是这样,我希望它对某人有所帮助。我花了很多时间来理解它。

于 2019-06-12T13:23:47.857 回答
0

试试imaskjs。它有 Number、RegExp 和其他掩码。扩展非常简单。

于 2018-05-06T08:28:38.840 回答