嗨,有人能帮我改进这个函数的正则表达式,使其包含负值吗?
功能是:
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);
}