1

我有接受 1 到 100 之间数字的正则表达式。但它接受特殊字符 '%'

这是我正在使用的正则表达式

^(0*100{1,1}\\.?((?<=\\.)0*)?%?$)|(^0*\\d{0,2}\\.?((?<=\\.)\\d*)?%?)$'

我不想接受 % 谁能帮我解决这个问题。

4

8 回答 8

7

Ali Shah Ahmed建议的正则表达式不适用于 1 位数字,这个可以:

(100)|(0*\d{1,2})

编辑:如果你不想接受值 0 你可以使用这个正则表达式:

(100)|[1-9]\d?
于 2013-01-31T09:58:33.470 回答
1

删除所有%?. 这表明正则表达式应该匹配零个或一个%字符。

于 2013-01-31T09:16:23.430 回答
1

我会采取多步骤的方法。不会尝试仅使用正则表达式来解决此问题。维护是一场噩梦。

我的解决方案:-

使用简单的正则表达式来确定该值是否为三位或更少位数的整数。

/^\d{1,3}$/

如果有效,则转换为一个数字。

检查数字是否为<= 100>= 0

于 2013-01-31T09:24:27.470 回答
1

我相信这个正则表达式也可以工作,并且比你提到的更简单。

(100)|(0*\d{1,2})

这也将处理前导零。

于 2013-01-31T09:25:59.930 回答
1

这仅匹配 1 到 100(含):
/\b((100)|[1-9]\d?)\b/

\b匹配单词边界。这意味着类似 JavaScript: 的东西
/((100)|[1-9]\d?)/.test("I have 1000 dollars");
会返回true. 相反,使用边界一词将返回false

于 2017-02-06T05:18:53.023 回答
0

这允许从 1 到 100 的数字:

100|[1-9]?\d
于 2013-01-31T10:19:30.673 回答
0

^(100|[1-9][0-9]?)$ 这个正则表达式匹配 1 到 100,100 正好匹配 100 或 [1-9] 匹配 1 到 9 [0-9] 范围内的字符匹配 0 到 9 范围内的字符?匹配前一个标记的 0 和 1

并供您参考在此处验证正则表达式组合https://regexr.com/

于 2019-09-26T02:26:35.540 回答
-1

如果您的匹配项包含小数点且没有前导零,我认为这是最佳选择

^(?:[0-9]|[1-9][0-9](\.\d{1,2})?|100|10.00)$
22   # returns True
100   # returns True
22.35  # returns True
20.23  # returns True
100.1  # returns false out bound/range
02     # returns False leading zero
69.235  # returns False exceeds 2 decimal places
001     # returns False has 2 leading zeroes

它将小数位数限制为两位小数检查测试组合https://regex101.com/r/Tpe9Ia/10 1

于 2020-03-18T17:45:46.660 回答