2012-03-14 76 views
1

我使用我的脚本来验证输入分钟以下......它允许数字和以正确的格式为成千上万的逗号只......不过,我想补充一个长度限制还有......我似乎无法做到这一点,我仅仅把ITIN错了地方......这里是代码是没有限制:限制表达长度

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

我想在做这个至少一个与五个最大...条目是网上每天分钟......那么有一天只有1440分钟...如果你输入1,440有效期目前是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 2012-03-14 08:15:37

+0

从来没有想过做这样 - 这将很好地工作 - 谢谢! – user756659 2012-03-14 09:27:38

0

你可能会更好过只是测试字符串的长度甚至整数值。但是,仅仅表明它可能:

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

是的,这是非常简单的,因为一个四位数号码只能采取的一种形式

  • 一个数字,逗号,三个数字
  • 四位数字