尝试这个:
/^[1-9]\d*$/
此检查将确保第一个字符是除“0”之外的任何数字,然后是零个或多个任何数字。
这种模式需要与您所拥有的略有不同的方法。key
您不想检查值,而是要对整个字段值进行测试。如果当前按键破坏了模式匹配,它将阻止将关联的字符添加到值中。
仅允许添加添加继续匹配模式的字符的击键。在这种情况下,模式分解为:
^
- 值的开始
[1-9]
- 只允许一个字符,只允许数字 1 到 9
\d*
- 零个或多个任意数字(即 0 到 9)
$
- 值的结束
更新:
现在我已经了解了您是如何绑定它的,您应该能够进行一些更新以使其正常工作。首先,您需要传递验证绑定到的元素。. . 所以,在你的 HTML 中,改变这个:
onkeypress='validate_numberonly(event)'
. . . 对此:
onkeypress='validate_numberonly(this, event)'
然后,在您的 JS 中,您需要进行两项更改:1) 接受新参数,以及 2) 检索输入的值并使其成为正则表达式检查的一部分:
function validate_numberonly(evt) {
. . .
if( !regex.test(key) ) {
. . .
. . . 变成,这:
function validate_numberonly(el, evt) {
. . .
if( !regex.test(el.value + key) ) {
. . .
现在,代码将只排除创建与正则表达式模式匹配的值的数字值。
话虽如此 。. .
这也会阻止所有非数字字符。. . 包括“Backspace”和“Delete”(更不用说箭头键、“Home”、“End”等),意思是用户一旦输入了一个值,就不能再改变一个值,而无需使用右键-单击他们的鼠标菜单(或添加额外的验证以允许您希望仍然起作用的那些控制键值)。
onchange
将我提供的正则表达式用作由事件触发的“最终值”检查,并提供某种错误消息,提示用户仅输入数字,没有前导“0”,这确实更有意义“s。