正十进制值的正则表达式和jquery中的-1值

时间:2015-04-28 14:03:32

标签: jquery regex

jquery中正十进制值和-1值的正则表达式如何? 我设法用它做正负十进制值,但它只能是-1。有什么想法吗?

$(".SermeCoopValidarTope").keypress(function (e) {
    var tecla = (document.all) ? e.keyCode : e.which;
    var numeroDecimal = $(this).val();
    if (tecla == 8) return true;

    if (tecla > 47 && tecla < 58) {
        if (numeroDecimal == "") return true
        regexp = /^([0-9])*[.]?[0-9]{0,1}$/;
        return (regexp.test(numeroDecimal))
    }
    if (tecla == 46) {
        if (numeroDecimal == "") return false
        regexp = /^[0-9]+$/
        return regexp.test(numeroDecimal)
    }
    return false
});

2 个答案:

答案 0 :(得分:2)

使用带有两个匹配表达式的|来测试/或匹配。

我还根据当前值和新的按键重新编写代码来构造期望值。这大大简化了代码。

$(".SermeCoopValidarTope").keypress(function (e) {
    var tecla = (document.all) ? e.keyCode : e.which;

    var numeroDecimal = $(this).val();

    // Allow backspace
    if (tecla == 8) return true;

    // if it's a valid character, append it to the value
    if ((tecla > 47 && tecla < 58) || tecla == 45 || tecla == 46) {
        numeroDecimal += String.fromCharCode(tecla)
    }
    else return false;

    // Now test to see if the result "will" be valid (if the key were allowed)

    regexp = /^\-1?$|^([0-9])*[.]?[0-9]{0,2}$/;
    return (regexp.test(numeroDecimal));
});

JSFiddle: http://jsfiddle.net/TrueBlueAussie/Ld3n4b56/

更新以支持,而不是.小数分隔符:

$(".SermeCoopValidarTope").keypress(function (e) {
    var tecla = (document.all) ? e.keyCode : e.which;

    var numeroDecimal = $(this).val();

    // Allow backspace
    if (tecla == 8) return true;

    // if it's a valid character, append it to the value
    if ((tecla > 47 && tecla < 58) || tecla == 45 || tecla == 44) {
        numeroDecimal += String.fromCharCode(tecla)
    }
    else return false;

    // Now test to seee of the result will be valid

    regexp = /^\-1?$|^([0-9])*[,]?[0-9]{0,2}$/;
    return (regexp.test(numeroDecimal));
});

JSFiddle: http://jsfiddle.net/TrueBlueAussie/Ld3n4b56/1/

RegEx的缩短版本(感谢@Brian Stephens):

句点小数分隔符:http://jsfiddle.net/Ld3n4b56/4/

/^(-1?|\d*.?\d{0,2})$/

逗号小数点分隔符:http://jsfiddle.net/Ld3n4b56/3/

/^(-1?|\d*,?\d{0,2})$/

答案 1 :(得分:1)

您可以使用|(或运营商):

/^([0-9]+|-1)$/ or simply /^(\d+|-1)$/

另外,我建议您将正则表达式/^([0-9])*[.]?[0-9]{0,1}$/更改为

/^([0-9])*(\.[0-9])?$/ or simply /^\d*(\.\d)?$/

使其更有意义且不允许123.(以点结尾)或仅.

等值