【问题标题】:Regex for number check below a value正则表达式用于数字检查低于一个值
【发布时间】:2011-04-13 10:38:53
【问题描述】:

我仍然是 regex 的初学者,所以目前这比我略高。

我需要验证输入到两个字符的数字,它不能超过值 12。

这两个数字很简单:

/^\d{1,2}$/

然后检查如果有两个数字,那么第一个必须是 0 或 1,第二个必须是 0、1 或 2。 那部分我不知道怎么表达,经常……

如果可能的话,我想在单个正则表达式中使用它。

任何帮助表示赞赏。

【问题讨论】:

  • 我怀疑正则表达式是最好的方法。您使用什么语言?
  • 所以,例如09 不允许?它有两个字符,第二个不在[012]
  • 这只是一个简单的数字输入月份验证,由已经广泛的 js 验证引擎验证,正则表达式的原因是我需要一些正则表达式的练习,如果不是现在那么什么时候,现在我只是添加到现有的规则。我没有使用这些值进行计算,只有日期输入,所以字符验证似乎就足够了。感谢大家的回复。
  • 如果您要检查长度以下的数字:stackoverflow.com/questions/42328875/…

标签: regex


【解决方案1】:

正则表达式不适合处理这样的范围,但无论如何这应该可以:

/^(0?[1-9]|1[012])$/

说明:

^       match start of the string
(0?     optional zero
[1-9]       any number between 1 and 9
|1[012])    or match 1 followed by either a 0, 1, 2 i.e. 10, 11, 12.
$           match end of string

【讨论】:

  • 但是添加一个可选的0?在第一部分前面以防万一
  • 那里,我已经更新了正则表达式。应该允许 01、02、03 等。我假设这是为了验证月份日期? ;-) 如果您不想允许 012,013 等,那么只需移动 0?到第一个括号内:/^(0?[1-9]|1[012])$/
  • 我知道这对于验证中的正则表达式来说有点太多了。但效果很好。我扩展以验证完整日期,它非常适合原始验证。我已经好几个月没有做条件验证了,但它来了,希望它对某人有所帮助:@"^[0-9]{4}-(0?[1-9]|1[012])-([0-2]?[1-9]|3[01])\s([0-1]?[1-9]|2[0-3]):([0-6]?[1-9]):([0-6]?[1-9])$"
【解决方案2】:

对于这样的事情(测试一个整数是否小于给定值),你真的不应该使用正则表达式。

相反,只需使用像这样的简单条件 (语法将取决于您使用的语言)

if ($variable <= 12) {
  // OK
}
else {
  // Not OK
}

【讨论】:

  • 我正在使用 js 验证引擎(Form Validation Engine 2.0),所以编写另一个检查或修改正则表达式很简单,但我宁愿扩展正则表达式,因为我不擅长它。
【解决方案3】:

对于“字符 x、y、z 或 ...”,有 字符类,用方括号表示:

[012]

表示“012 的任何字符”。

【讨论】:

    【解决方案4】:
    (0[0-9])|(1[0-2])
    

    这匹配一个 0,后跟一个任意数字,或一个 1,后跟 0、1 或 2

    【讨论】:

      【解决方案5】:

      0[0-9]|1[0-2]

      Description:
      
       [0-9] : number between 00 and 09
           | : or
      1[0-2] : and if starting with 1, next number should be between 0 -1 (testing 10-12)
      

      【讨论】:

        【解决方案6】:

        以下代码 (Groovy) 创建了一个类似于来自@Gery Green 的答案的正则表达式,但适用于 任何 给定数字:

        String getSmallerNumberRegEx(String number) {
          int length = number.length()
          List<String> patterns = [];
          if (length >= 2) {
            patterns.add("\\d{1,${length - 1}}") // any number with less digits
          }
          for (int i = 0; i < number.length(); i++) {
            def digit = number[i].toInteger()
            if (digit > 0) {
              // same prefix + smaller number + any postfix:
              patterns.add("${number.substring(0, i)}[0-${digit - 1}]\\d{${length - i - 1}}")
            }
          }
          return patterns.join('|')
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-04-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-07-29
          • 2012-11-23
          相关资源
          最近更新 更多