2012-03-14 6 views
1

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

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

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

Кто-нибудь?

ответ

1

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

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

+1 для улучшения всего выражения. – stema

+0

так и не подумал сделать так - это сработает отлично - спасибо! – user756659

0

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

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

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

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