键按正则表达式以查找具有负值的小数



嗨,有人能帮我改进这个函数的正则表达式,使其包含负值吗?

功能是:

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
}

更改为"功能如果(键==46)…"

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

@伊恩如何逃跑??

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

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

然后我会提出以下代码:

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

最新更新