2012-03-14 13 views
1

私は入力した分を確認するために私のスクリプトで次のものを使用しています...それは正しい形式で数千のカンマと数字とを可能にします...しかし、制限式の長さ

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

は、私がこれをしたいと思い:制限なしであるだけでなく...私はそれを行うように見えることはできませんか、私は間違った場所をITIN入れている...ここにコードがあります少なくとも1つは最大5つ...エントリーは1日あたりオンラインの分数です... 1日で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

+0

このようにすることは決して考えられませんでした。これはうまくいくでしょう - ありがとう! – user756659

0

あなたはおそらく、単なる文字列のテスト方がいいでしょう長さ、さらには整数値であってもよい。しかし、単にそれが可能だと示すために:

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

はい、それは非常に簡単です、4桁の番号のみのいずれかの形式

  • 1桁、コンマ、3桁の数字を取ることができるので
  • 4桁
関連する問題