首页 > 文章 > 开发运维 > 正则找到数字就算验证通过?用整串边界与多行标志复算

正则找到数字就算验证通过?用整串边界与多行标志复算

正则测试工具

点击使用相关工具

去使用

把abc123粘到正则测试工具,表达式填[0-9]+,结果找到了123,位置是3。这个结果只能说明文本里有一段数字。如果你要检查的是“整个编号只能包含数字”,前面的abc已经让它不合格,不能拿“匹配数大于0”当作通过条件。

先用两条输入分清任务

页面把表达式和标志分成两个输入框,两边的斜杠已由界面显示。表达式框直接写^[0-9]+$,不要把/^[0-9]+$/g整段粘进去;右侧标志框先清空。测试文本一次只放一条编号,输入后结果会自动更新。

测试文本[0-9]+^[0-9]+$,标志留空
abc123找到123,位置30个匹配
00123找到00123,位置0找到完整00123,位置0
空格后接123找到123,位置10个匹配

[0-9]只允许ASCII数字,+要求至少一个;没有多行标志时,^和$限定输入的开头与结尾。第二列适合从说明文字里提取数字片段,第三列才对应此处的整串格式检查。前导零也会保留,工具不会把00123转换成数值123。全角数字123、小数点、负号、空格都不在这条规则的允许范围里。

首尾空白要不要清除是业务决定。若编号导入规则允许清理,可先在文本处理工作流逐行去除两端空格,再核对结果;若规则要求原样检查,就保留空白并让它不通过。不能为了得到符合预期的结果,悄悄删掉有意义的字符。

四行编号:g不会让边界自动变成逐行

把下面四行整体放进测试文本,表达式改成^A\d{2}$。这里的反斜杠只输入一个,表示A后面恰好两位数字。

A01
XA02
A03
A004

右侧填g时是0个匹配:整段输入既不是单独的A01,也不是单独的A03。改为gm后得到2个匹配,分别是位置0的A01和位置9的A03。XA02前面多了X,A004多了一位数字,两行都不会被完整选中。再把标志改成只有m,结果只显示第一处A01,共1个。

这组差别来自两个独立开关:m让首尾断言也能落在各行边界;g让本页继续查找后续匹配。于是“逐行找全部合格编号”需要gm,“检查一条完整编号”通常先用空标志。若拿gm下的2个命中推断整批四行全合格,仍然会放过两条错误记录。

没有结果时,先看输入,再看错误

表达式或测试文本为空时,本页会清空结果区,并不显示一次有效的0匹配测试。要验证空字符串能否通过某项业务规则,不能只看这个空白面板;本例的加号本来就要求至少一个数字。表达式填成单独的[时,会出现正则表达式错误,表示语法没有成立,不能把它记录成“校验失败0条”。

工具使用浏览器JavaScript的正则规则。其他语言、数据库或服务器框架的写法与标志可能不同,迁入生产校验代码前还要在目标环境验证。也不要把常用正则按钮的命中当作手机号可联系、身份证真实有效或日期确实存在的证明;格式只是其中一层。使用自己生成的小样本即可,避免粘贴客户名单或凭据;复杂嵌套重复可能让浏览器长时间无响应,不宜用大段真实数据试探性能。

为什么不直接勾“全部替换”?

这页负责展示匹配,并不替换原文本。需要把已确认的片段改写,再去文本替换;替换范围、普通文本与正则模式的选择是下一步任务,不能用替换成功反过来证明原输入合格。

结果位置从几开始?

从0开始,所以abc123里的1在位置3。这里的示例都是ASCII;遇到表情等字符,位置采用JavaScript字符串的UTF-16码元计数,不一定等于肉眼数出的字符数量。核对业务编号时,除了匹配次数,还应核对每次命中的完整值和被排除的行。

立即使用正则测试工具