正则表达式只验证-1(减1)和+1(1)之间的数字

时间:2018-01-04 20:36:44

标签: regex

我正在尝试整理一个正则表达式来验证百分比输入。输入需要特别从-1(减1)到1(加1)进行验证,其间的所有内容(例如:-0.85,0.2,0.45)都有效,超出或低于这些值的任何内容都会失败。

到目前为止我有以下内容,但无法解决如何将其限制为-1到1.任何帮助将不胜感激!

 const regEx = /^-?\d+(\.\d{1,9})?$/;

提前致谢:)

3 个答案:

答案 0 :(得分:1)

代码

See regex in use here

^-?(?: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;
&#13;
&#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)$

请参阅a demo on regex101.com

<小时/> 细分,这说:

^             # 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