英文:
Regex for limiting numbers between 0.01 and 1 - JAVA
问题
我想找一个正则表达式,允许在两位小数的情况下介于 0.01 到 1 之间的值(包括 0.01 和 1)。不允许出现 0.00、0.0 或 0。不允许大于 1 的值(例如,1.01、1.1 等)。能帮忙吗?
英文:
I want to find a regex which allows values between 0.01 and 1 , both inclusive upto two decimal places max. 0.00 , 0.0 or 0 is not allowed . Values greater than 1 (eg , 1.01 , 1.1 etc. is not allowed). Can i get help?
答案1
得分: 1
寻找其中一个好的模式:
- `(^0\.[0-9][1-9]$)`: 0.xy(其中 x 是数字 1-9,y 是数字 0-9)
- `(^0\.[1-9]0*$)`: 0.x(其中 x 是数字 1-9,可选的零)
- `(^1\.0{1,2}$)|(^1$)`: 允许的 1 的表示之一(1, 1.0, 1.00)
`(^0\.[0-9][1-9]$)|(^0\.[1-9]0*$)|(^1\.0{1,2}$)|(^1$)`
使用 `^` 和 `$` 应该处理边缘测试案例:
0
0.0
0.00
0.01 - 匹配
0.1 - 匹配
0.01 - 匹配
0.10 - 匹配
0.11 - 匹配
0.1.1
0.11.1
00
00.1.1
1 - 匹配
1.0 - 匹配
1.00 - 匹配
1.10
1.11
0.001
0.111
详见 https://regex101.com/r/U4I9sK/2
英文:
Searching for one of good patterns:
(^0\.[0-9][1-9]$)
: 0.xy (where x is digit 1-9 and y is digit 0-9)(^0\.[1-9]0*$)
: 0.x (where x is digit 1-9, with optional zero)(^1\.0{1,2}$)|(^1$)
: one of allowed notations for 1 (1, 1.0, 1.00)
(^0\.[0-9][1-9]$)|(^0\.[1-9]0*$)|(^1\.0{1,2}$)|(^1$)
With ^
and $
should handle edge testcases:
0
0.0
0.00
0.01 - match
0.1 - match
0.01 - match
0.10 - match
0.11 - match
0.1.1
0.11.1
00
00.1.1
1 - match
1.0 - match
1.00 - match
1.10
1.11
0.001
0.111
答案2
得分: 0
并不是一个正则表达式,而是一个返回你期望值的方法。你需要完成两件事:范围比较和长度比较(如果范围合适)。
就像这样,
public static boolean isGood(double x){
return x >= 0.01
&& x <= 1.0
&& String.valueOf(x).split("\\.")[1].length() <= 2;
}
英文:
Not a regex, but a method to return what you expected. You need to do two things: range comparison & length comparison if range is satisified.
Like so,
public static boolean isGood(double x){
return x>=0.01
&& x<=1.0
&& String.valueOf(x).split("\\.")[1].length()<=2;
}
答案3
得分: 0
当你说 'allow' 时,你是指要排除,即完全排除,还是想要转换成长十进制?
如果是排除的话,正则表达式为:
^(1(\.0?0?)?|0?\.(0[1-9]|[1-9]\d?))$
这还允许仅为 '1.'。
如果是要转换的话,你可以使用一系列的条件判断和设置精度,就像这里回答的那样:
https://stackoverflow.com/questions/10631813/javascript-tofixed-equivalent-in-java
英文:
When you say 'allow' do you mean to disallow, ie excluded completely, or are you wanting to convert the long decimal?
If excluding then regex =
^(1(\.0?0?)?|0?\.(0[1-9]|[1-9]\d?))$
This also allows for just '1.'.
if converting, then you can use a combination of if conditions and setScale 'as answered here:
https://stackoverflow.com/questions/10631813/javascript-tofixed-equivalent-in-java'
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论