Два предложения:
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