Регулярное выражение: матч от 1 до 60 или все - PullRequest
4 голосов
/ 29 августа 2011

Мне нужна помощь по REGEX в php (Symfony).

Я хочу сопоставить значения от 1 до 60 или все строки.

Для числа я использую это: ^([1-5]?[0-9]|60), но оно соответствует 0 ...не сейчас, как можно сопоставить «все».

Можете ли вы помочь мне?Большое спасибо до

Ответы [ 4 ]

12 голосов
/ 29 августа 2011

Вы должны быть в состоянии разделить его на следующие возможности:

^([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

иногда может быть, хотя и более многословным, также более читабельным и понятным.

4 голосов
/ 29 августа 2011

Это будет соответствовать всем, что вам нужно

^([1-9]|[1-5]\d|60|all)$
0 голосов
/ 29 августа 2011

Проблема в том, что вам не хватает скобок, и вы должны поменять 60 и остальные, потому что в противном случае он будет соответствовать только 6 из 60:

^((60|([1-5]?[0-9]))|all)
0 голосов
/ 29 августа 2011

Вы делаете [1-5] необязательным; переверните его, вот так: [1-5][0-9]?. Также вам необходимо покрыть однозначную цифру [6-9].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...