正则匹配纯数字输入问题:首字符为1-9后续为任意数字
问题分析与解决方案
你的正则表达式问题出在没有限制字符串的结尾,导致只要开头符合规则,后面即使有非数字字符也会被判定为有效。比如输入131aab时,正则会匹配开头的131部分,test()就返回true,这不符合你要匹配纯数字的需求。
正确的正则表达式
要确保整个字符串都是符合要求的数字,需要在正则末尾加上结束锚点$,表示字符串必须在这里结束。可以写成两种形式:
- 完整写法:
/^[1-9][0-9]*$/ - 简化写法(
\d等价于[0-9]):/^[1-9]\d*$/
这个正则的含义是:
^:字符串的起始位置[1-9]:第一个字符必须是1到9的数字(不能是0)\d*:后续可以有0个或多个数字$:字符串的结束位置
修正后的测试函数代码
另外你的测试代码里还有两个小问题:
- 重复声明了
eid变量,而且callNo没有定义,应该是对获取到的empID值做trim处理 - 正则缺少结束锚点
修正后的代码如下:
var eid = document.forms["frmDelTrukNum"]["empID"].value; eid = eid.trim(); // 去掉重复声明,正确处理输入的首尾空格 var cp = document.forms["frmDelTrukNum"]["cmp"].value; var regPattern = /^[1-9]\d*$/; // 加上结束锚点$ if (!regPattern.test(eid)) { alert("Alert[" + eid +"] First character must be a number 1-9, the rest can be any number. Company: " + cp); return false; }
测试用例验证
用修正后的正则测试你的用例,结果如下:
- 有效输入:
1、12、321、3214、54678→ 全部返回true - 无效输入:
2a、131aab、0、01→ 全部返回false,符合预期
内容的提问来源于stack exchange,提问作者Jess
相关产品推荐
相关产品推荐

