2012-03-14 104 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})$#") 

是的,這是非常簡單的,因爲一個四位數號碼只能採取的一種形式

  • 一個數字,逗號,三個數字
  • 四位數字