如何编写匹配以数字开头、+后接数字的正则表达式
符合要求的正则表达式实现方案
1. 完整字符串校验正则(判断输入是否完全合法)
如果你的需求是校验整个输入是否符合规则,直接使用如下正则即可:
^\d+(\+\d+)*$
规则解释:
^匹配字符串起始位置,保证从开头校验\d+要求开头必须是1位及以上数字(\+\d+)*匹配0次或多次「+后跟1位及以上数字」的组合,确保所有+后面都跟随数字,同时不会出现末尾以+结尾的情况$匹配字符串结束位置,保证校验覆盖整个输入
匹配效果验证:
- 可匹配合法输入:
1+2、3、1+22+3 - 不可匹配非法输入:
+1+2、1+、a+1+b+c、12+
2. 非法字符清洗正则(保留合法内容,删除无效字符)
如果你的需求是清洗输入中的非法内容,提取合法部分,按以下三步执行即可,不会出现连带删除合法数字的问题:
- 第一步:删除所有非数字、非
+的非法字符
正则:[^+\d],替换为空字符串 - 第二步:删除开头所有连续的
+
正则:^\+*,替换为空字符串 - 第三步:删除末尾的
+,以及所有后面没有跟随数字的+
正则:\+(?!\d)|\+$,替换为空字符串
原正则问题说明
你之前使用的[^0-9][^+]?逻辑是匹配1个非数字字符,再跟1个可选的非+字符,当匹配到开头的+时,后续的数字属于非+字符,就会被连带匹配到,所以会出现误删数字的问题。
内容的提问来源于stack exchange,提问作者Kemal Hatunoglu
相关产品推荐
相关产品推荐

