我正在尝试整理一个正则表达式来验证百分比输入。输入需要特别从-1(减1)到1(加1)进行验证,其间的所有内容(例如:-0.85,0.2,0.45)都有效,超出或低于这些值的任何内容都会失败。
到目前为止我有以下内容,但无法解决如何将其限制为-1到1.任何帮助将不胜感激!
const regEx = /^-?\d+(\.\d{1,9})?$/;
提前致谢:)
答案 0 :(得分:1)
^-?(?:1(?:\.0+)?|0(?:\.\d+)?)$
假设JavaScript基于您当前的代码,但如果您更新为其他语言,我会将代码更改为该语言。
var a = [-1.0,-1,-0.85,0,0.2,0.45,1,1.0,-100,-10,-2,-1.01,1.01,2,10,100]
var r = /^-?(?:1(?:\.0+)?|0(?:\.\d+)?)$/
a.forEach(function(v) {
if (r.exec(v) !== null) {
console.log(v)
}
})

假设这也是可以接受的,你不需要正则表达式:
var a = [-1.0,-1,-0.85,0,0.2,0.45,1,1.0,-100,-10,-2,-1.01,1.01,2,10,100]
a.forEach(function(v) {
if (v >= -1 && v <= 1) {
console.log(v)
}
})
&#13;
^
在行首处断言位置-?
可选择匹配-
(允许匹配负值或正值)(?:1(?:\.0+)?|0(?:\.\d+)?)
匹配以下任一项
1(?:\.0+)?
匹配以下内容(匹配1,1.0,1.00等)
1
按字面意思匹配(?:\.0+)?
可选择匹配以下内容
\.
字面匹配点字符.
0+
匹配一个或多个0
字面0(?:\.\d+)?
匹配以下内容(这匹配0.000 ...至0.999 ......)
0
按字面意思匹配(?:\.\d+)?
可选择匹配以下内容
\.
字面匹配点字符.
\d+
匹配一个或多个数字$
断言行尾的位置答案 1 :(得分:0)
您可以使用
^(?:-1|-?0(?:\.\d+)?|1)$
<小时/>
细分,这说:
^ # start of line
(?: # non-capturing group
-1 # -1
| # or
-?0(?:\.\d+)? # -0.9999 until 0.9999
| # or
1 # 1
)
$ # end of string
<小时/> 否则,只需获取输入,将其转换为数字并使用一些编程逻辑(即
if number ...
)。
答案 2 :(得分:0)
如果语言分析器要验证介于-1和1之间的数字,那么它将是 这样做:
(?m)^-?0*(?:1(?:\.0*)?|0(?:\.\d*)?|\.\d+)$
格式化
(?m)
^
-? 0*
(?:
1
(?: \. 0* )?
|
0
(?: \. \d* )?
|
\. \d+
)
$
匹配这些:
1
-1.
-0
0.
.0
0.2
0.99
-0.333
-.999