正则表达式:匹配1到60或全部

时间:2011-08-29 12:45:24

标签: php regex string

我需要一些关于REGEX的帮助(Symfony)。

我希望匹配值1到60或字符串全部。

我想使用此号码:^([1-5]?[0-9]|60)但匹配 0 ...我现在不知道如何匹配“全部”。

你能帮帮我吗? 非常感谢

4 个答案:

答案 0 :(得分:12)

您应该能够将其分为以下几种可能性:

^([1-9]|[1-5][0-9]|60|all)$

这为您提供了四种可能性:

  • [1-9]个位数值。
  • [1-5][0-9]:从十点到五十九点的所有内容。
  • 60:六十。
  • all:您的“全部”选项。

但请记住,正则表达式并不总是每个问题的答案。

有时它们对复杂的价值检查不太有用(但在这种情况下,它是一个相当简单的检查)。类似下面的内容(伪代码):

def isAllOrOneThruSixty(str):
    if str == "all":
        return OK
    if str.matches ("[0-9]+"):
        val = str.convertToInt()
        if val >= 1 and val <= 60:
            return OK
    return BAD

有时候,虽然更详细,但也更具可读性和可维护性。

答案 1 :(得分:4)

这将满足您的所有需求

^([1-9]|[1-5]\d|60|all)$

答案 2 :(得分:0)

您正在[1-5]选择;把它转过来,就像这样:[1-5][0-9]?。您还需要覆盖一位数的[6-9]

答案 3 :(得分:0)

问题是你缺少一些括号,你应该切换60和其余的,否则它只会匹配60中的6:

^((60|([1-5]?[0-9]))|all)