【问题标题】:Regex that matches integers in between whitespace or start/end of string only仅匹配空格或字符串开头/结尾之间的整数的正则表达式
【发布时间】:2012-02-21 01:08:38
【问题描述】:

我目前正在使用该模式:\b\d+\b,并使用以下条目对其进行测试:

numb3r 
2
3454 
3.214
test

我只希望它捕获 2 和 3454。它非常适合捕获数字单词,除了边界标志 (\b) 包括 "." 作为单独的单词考虑。我尝试排除句点,但在编写模式时遇到了麻烦。

基本上我想删除整数单词,并且只删除它们。

【问题讨论】:

  • 您在哪种情况下使用正则表达式? grep?维姆?珀尔?其他...

标签: regex


【解决方案1】:

你想要的只是下面的正则表达式:

^\d+$

【讨论】:

  • 在您需要处理负整数之前一直有效。
  • 这也将匹配前导零。我没想到你会想要。
  • 前导零不是无效的,是吗?它们毫无意义,是的,但我不确定它们是否无效。
【解决方案2】:

类似于 manojlds,但包括可选的负数/正数:

var regex = /^[-+]?\d+$/;

编辑

如果你不想让前面有零(023 无效),你可以这样写:

var regex = /^[-+]?[1-9]\d*$/;

编辑 2

正如@DmitriyLezhnev 指出的那样,如果您想让数字0 本身有效但在其他数字前面仍然无效(例如:0 有效,但023 无效)。然后你可以使用

var regex = /^([+-]?[1-9]\d*|0)$/

【讨论】:

  • 仍然允许“023”,不是吗?
  • 我会改进它:var regex = /^([+-]?[1-9]\d*|0)$/
  • DmitriyLezhnev 的评论(在我的正上方)是最好的,因为它也只允许纯 0。
【解决方案3】:

如果您只想匹配空格,则可以使用环视:

(?<=\s|^)\d+(?=\s|$)

【讨论】:

  • 要捕获负数,您可以添加 [-+]?也捕捉负数。正则表达式变为: (?
  • 过于复杂
  • Linter 不喜欢这样
【解决方案4】:

这仅允许正整数。

^[0-9]*[1-9][0-9]*$

【讨论】:

    【解决方案5】:

    我会将此作为评论添加到其他好的答案中,但我需要更多的声誉才能这样做。如有必要,请务必允许使用科学记数法,即 3e4 = 30000。这是许多语言的默认行为。我发现以下正则表达式可以工作:

    /^[-+]?\d+([Ee][+-]?\d+)?$/;
    //          ^^              If 'e' is present to denote exp notation, get it
    //             ^^^^^          along with optional sign of exponent
    //                  ^^^       and the exponent itself
    //        ^            ^^     The entire exponent expression is optional
    

    【讨论】:

      【解决方案6】:

      此解决方案匹配整数:

      • 匹配负整数(-1、-2 等)
      • 匹配单个零 (0)
      • 负零不是(-0、-01、-02)
      • 空格不匹配 ('')
      /^(0|-*[1-9]+[0-9]*)$/
      

      【讨论】:

        【解决方案7】:
        ^([+-]?[0-9]\d*|0)$
        

        将接受前导“+”、前导“-”和前导“0”的数字

        【讨论】:

          【解决方案8】:

          试试/^(?:-?[1-9]\d*$)|(?:^0)$/

          它匹配正数、负数以及零。

          它与00-0+0-00+0001 等输入不匹配。

          http://rubular.com/r/FlnXVL6SOq提供在线测试

          【讨论】:

          • 我认为它应该赶上01
          • @BlackThunder 它没有。在 JS 控制台中 /^(?:-?[1-9]\d*$)|(?:^0)$/.test('01') 返回 false。
          • 也许他的意思是 01。无论如何,只要没有数字,它就不会捕捉到尾随句点。
          【解决方案9】:

          ^(-+)?[1-9][0-9]*$ 以 - 或 + 开头 0 或 1 次,然后你想要一个非零数字(因为没有 -0 或 +0 这样的东西),然后它以 0 到 9 之间的任何数字继续

          【讨论】:

            【解决方案10】:

            这在我需要正负整数的情况下有效,它们不应该包括像 01258 这样的零起始数字,但当然应该包括 0

            ^(-?[1-9]+\d*)$|^0$
            

            有效值示例: "3", "-3", "0", "-555", "945465464654"

            无效值示例: "0.0", "1.0", "0.7", "690.7", "0.0001", “一种”, "", " ", ".", "-", "001", "00.2", "000.5", ".3", "3.", "-1", "+100", "--1", "-.1", "-0", "00099", “099”

            【讨论】:

              猜你喜欢
              • 2014-05-14
              • 1970-01-01
              • 1970-01-01
              • 2021-07-04
              • 2015-04-27
              • 1970-01-01
              相关资源
              最近更新 更多