我正在努力构建一个Regex,它可以验证整数、小数、分数、范围,以及整数和范围或分数的复杂组合。
到目前为止,在另一个StackOverflow问题的帮助下,我想出了这个:
/^(?:(?:0|[1-9]d*)(?:[.,]d+)?|([1-9]s)?([1-9]d*[/-][1-9]d*-?)+)$/
这验证了:
- 不带前导零的整数(01无效(
- 只有一个前导零的小数(001,2无效(
- 没有小数的分数(1/2有效,但1,2/24无效(
- 不带小数的范围(1-2有效,但1,2,4无效(
- 一位数单位和分数或范围的组合(1 1/2(。对于单位,适用整数规则(没有逗号等(
- 范围和分数的组合(1/2-1/4有效,但1/2-不应有效(
但是我在验证一些包含带分数的整数和范围的复杂组合时遇到了问题。例如,这也应该有效:
1-1 1/2
使用我当前的正则表达式,我如何验证这一部分?
谢谢!
如果当前模式验证了单个需求,您可以选择重复前面加一个空格。
^(?:(?:[1-9]d+|[1-9]d*[/-][1-9]d*|(?:0|[1-9]d*),d+)|[1-9](?:[/-][1-9]d*)?(?:[ -][1-9][/-][1-9]d*)?)$
解释
^
字符串开始(?:
非捕获组(?:
非捕获组[1-9]d+
匹配数字1-9和数字0-9的1+倍|
或[1-9]d*[/-][1-9]d*
|
或(?:0|[1-9]d*),d+
匹配0或数字1-9,可选数字后跟,
和1+数字
)
关闭非捕获组|
或[1-9]
匹配个位数1-9(?:[/-][1-9]d*)?
可选地匹配/
或-
以及后面跟有可选数字的数字1-9(?:[ -][1-9][/-][1-9]d*)?
可选地匹配空格或-
,然后匹配数字1-9,/
或-
,然后匹配一个数字1-9和可选数字0-9
)
关闭非捕获组$
字符串结束
Regex演示