ограничить длину выражения - PullRequest
1 голос
/ 14 марта 2012

Я использую следующее в моем сценарии для проверки введенных минут ... он допускает числа и запятую для тысяч только в правильном формате ... однако я также хотел бы добавить ограничение длины... Кажется, я не могу это сделать, или я просто помещаю это в неправильное место ... вот код без ограничений:

(!preg_match("#^(\d{1,3}(\,\d{3})*|(\d+))$#",$values['minutes']))

Я хотел бы сделать это по крайней мереодин с максимум пятью ... запись для минут онлайн в день ... ну, есть только 1440 минут в день ... если вы ввели 1440, которые действительны в настоящее время, это 5 символов, и я хочу ограничитьвыражение этому ...

Кто-нибудь?

Ответы [ 2 ]

1 голос
/ 14 марта 2012

Два предложения:

preg_match("#^(?:\d{1,3}|1,?\d{3})$#"

Объяснение:

^        # Start of string
(?:      # Either match...
 \d{1,3} # a three-digit number
|        # or
 1       # a four digit number that starts with a 1
 ,?      # and may have a thousands separator
 \d{3}   # (and three more digits)
)
$        # End of string

Проблема, конечно, в том, что это также позволяет 1,999, так что вы все равнонужна дополнительная проверка вменяемости.Возможно, это лучшее решение.

Вы можете также сделать ограничение диапазона в самом регулярном выражении, но это громоздко:

preg_match("#^(?:1,?440|1,?4[0-3]\d|1,?[0-3]\d{2}|[1-9]\d{1,2}|\d)$#"

Объяснение:

^                # Start of string
(?:              # Either match...
 1,?440          # 1440
|                # or  
 1,?4[0-3]\d     # 1400-1439
|                # or
 1,?[0-3]\d{2}   # 1000-1399
|                # or
 [1-9]\d{1,2}    # 10-999
|                # or
 \d              # 0-9
)
$                # End of string
0 голосов
/ 14 марта 2012

Возможно, вам лучше просто проверить длину строки или даже целочисленное значение.Но просто для того, чтобы показать, что это возможно:

preg_match("#^(\d,\d{3}|\d{1,4})$#")

Да, это очень просто, поскольку четырехзначное число может принимать только одну из форм

  • одна цифра, запятая,три цифры
  • четыре цифры
...