首页 > 解决方案 > 正则表达式验证数字管道

问题描述

我需要一个可以验证以下内容的正则表达式:

验证没有空值或空格

123|2.3|3.6

验证没有一个数字是负数

123|0.0|2.3

验证每个数字不超过 9 位,不计算小数点后的数字

123|333333333.32|3.4

这是我的尝试:

^(?:[^|]+(?:\|[^|]+){0,2})?$

标签: javaregex

解决方案


我想出了这个:

^(\d{1,9}(?:\.\d+)?)\|(\d{1,9}(?:\.\d+)?)\|(\d{1,9}(?:\.\d+)?)$

第一个数字:

(\d{1,9}(?:\.\d+)?)

\d{1,9}表示 1 位和最多 9 位数字。(?:\.\d+)?表示可能的小数点和其后的一位或多位数字。

对于后续数字\|表示管道,之后我包含与第一个数字相同的正则表达式(\d{1,9}(?:\.\d+)?)

我封装了每个数字,()使每个数字成为一个捕获组。如果您不需要捕获数字而只需要验证,这个也可以:

^\d{1,9}(?:\.\d+)?(?:\|\d{1,9}(?:\.\d+)?){2}$

推荐阅读