正则表达式限制接受最多14位数

时间:2012-12-05 06:50:06

标签: ruby regex

上次我被要求检查字符串至少8位数。我得到了以下正则表达式:

    /^(?=(.*\d){8,})[\d\(\)\s+-]{8,}$/

您可以在此处查看问题:Checking string with minimum 8 digits using regex

现在我想限制字符串在同一个正则表达式中接受最多14位数。我试过这个:

   /^(?=(.*\d){8,14})[\d\(\)\s+-]{8,}$/

没有运气。请任何人帮我解决这个问题。

更新

在获得2票之后,我认为最好自己编写。我使用以前的正则表达式构造了正则表达式。以下正则表达式适用于我:

    /^(?=(.*\d){8})(?!(.*\d){15})[\d\(\)\s+-]{8,}$/

4 个答案:

答案 0 :(得分:5)

根据您的要求,正则表达式应该如下:

/^\d{8,14}$/

答案 1 :(得分:3)

从您的回答和您的另一个问题来看,您似乎正在将一大堆不同的规则编码到一个日益复杂的正则表达式中:

  1. 字符串必须至少为12个字符
  2. 它只能包含数字,圆括号,+和 - 符号以及空格
  3. 必须有8到14位数字
  4. 虽然使用正则表达式可以做到这一点,但值得吗?我认为这样一个复杂的正则表达式是不可能阅读的,因此很难维护。

    如果你拆分不同的标准,它会更加清晰。

    1. string.length >= 12
    2. string =~ /^[\d()+-\s]+$/ - 请注意,通过使用方括号创建一个字符类,您不需要转义,这也使得它更简单。
    3. (8..14).include?(string.count("0-9")) - 查看String#count
    4. 的文档

      所以,总的来说,

      def valid?(string)
        string.length >= 12 &&
          string =~ /^[\d()+-\s]+$/ &&
          (8..14).include?(string.count("0-9"))
      end
      

      它有点长,但它更容易理解。

答案 2 :(得分:1)

尝试:

/^(?=(.*\d){8,14}(?!.*\d))[\d\(\)\s+-]{8,}$/

如果我将负向前置放置在右前方,我将无法匹配超过14位数的strimg。

答案 3 :(得分:0)

如果之前的正则表达式达到你想要的效果,请尝试在第二个“8”实例之后添加14,但它确实比8-14位更复杂!

相关问题