带有负值的小数的按键正则表达式

时间:2016-05-16 20:16:11

标签: javascript regex

你可以帮助我改进这个函数的正则表达式以包含负值吗?

功能是:

function Validate7EntY2Dec(e, field) {
    key = e.keyCode ? e.keyCode : e.which
    // backspace
    if (key == 8) return true

    // 0-9 a partir del .decimal  
    if (field.value != "") {
        if ((field.value.indexOf(".")) > 0) {
            if (key > 47 && key < 58) {
                if (field.value == "") return true
                regexp = /[0-9]{2}$/
                return !(regexp.test(field.value))
            }
        }
    }
    // 0-9 
    if (key > 47 && key < 58) {
        if (field.value == "") return true
        regexp = /[0-9]{7}/
        return !(regexp.test(field.value))
    }
    // .
    if (key == 46) {
        if (field.value == "") return false
        regexp = /^[0-9]+$/
        return regexp.test(field.value)
    }
    // other key
    return false
}

据我所知/[0-9]{2}$/验证小数点后的两位数,/[0-9]{7}/验证整数中的七位数字。我希望这也接受负值,以便用户可以插入-1234567.12例如。

我在其他问题上找到了这个正则表达式^[+-]?[0-9]{1,9}(?:\.[0-9]{1,2})?$,但不知道如何在我的函数中插入。 还发现在-上添加/[0-9]{7}/会接受负值,但它没有,我这样做了:/[-0-9]{7}/

我需要保留我的功能,因为它已经被使用过了。

提前谢谢你!

编辑:

在@Ian推荐之后,我的代码是这样的:

function Validate7EntY2Dec_Neg(e, field) {
    key = e.keyCode ? e.keyCode : e.which
    // backspace
    if (key == 8) return true

    // 0-9 a partir del .decimal  
    if (field.value != "") {
        if ((field.value.indexOf(".")) > 0) {
            if (key > 47 && key < 58) {
                if (field.value == "") return true
                regexp = /[0-9]{2}$/
                return !(regexp.test(field.value))
            }
        }
    }
    // 0-9 
    if (key > 47 && key < 58) {
        if (field.value == "") return true
        regexp = /[0-9]{7}/
        return !(regexp.test(field.value))
    }
    // .
    if (key == 46) {
        if (field.value == "") return false
        regexp = /^[+-]?[0-9]{7}\.[0-9]{2}$/
        return regexp.test(field.value)
    }
    // other key
    return false
}

更改是“函数if(key == 46)...”

if (key == 46) {
   if (field.value == "") return false
   regexp = /^[+-]?[0-9]{7}\.[0-9]{2}$/
   return regexp.test(field.value)
}

@Ian怎么逃避 - ??

2 个答案:

答案 0 :(得分:0)

^ [+ - ]?[0-9] {7} \。[0-9] {2} $应该有效。插入符号强制开始字符串,美元结束。我也强迫一个7.2位的数字,我认为这就是你想要的。还有可选的+/-开头。

答案 1 :(得分:0)

我建议你不要再担心按键,并在每次更改时验证整个字段。我相信这不会导致任何性能问题,并且会极大地提高代码的可维护性。

然后我会提出以下代码:

function Validate7EntY2Dec_Neg(e, field) {
    return /^[+-]?[0-9]{7}\.[0-9]{2}$/.test(field.value);
}