2012-03-29 23 views
0

次のパターンに問題がありますか?preg_matchを使用した正規表現

~(?P<day>[1-9]{1,2})[.](?P<month>[1-9]{1,2})[.](?P<year>[0-9]{1,4})~ 

私は

21.12.2012 
21.8.2012 // not 21.08.2012 

..フォーマットを以下のようにしたいが、それはまたことができます。..

2012.12.12 
12.12.12 

...

ありがとう助けてください、 のHardik

+0

先行ゼロを許可したくないのですか?月の部分だけ、または日の部分だけ?あなたの仕様はかなり曖昧です。また、なぜ先行ゼロを最初に許さないのでしょうか? –

+0

はいまた昼間の部分で... 03.12.2012は許されません。 – hardik

答えて

3

anchor正規表現を忘れました。また、あなただけの4桁の年を許可する場合、あなたはそれを明示的に行う必要があります。

~^(?P<day>[0-9]{1,2})[.](?P<month>[0-9]{1,2})[.](?P<year>[0-9]{4})$~ 

^$は、あなたの正規表現が一致していないことを保証する、文字列の先頭と末尾に一致します12.12.12部分文字列は2012.12.12です。あなたが先行ゼロを禁止したい場合は

、もちろん

~^(?P<day>[1-9][0-9]?)[.](?P<month>[1-9][0-9]?)[.](?P<year>[0-9]{4})$~ 

を使用し、これは(99.99.9999は、この正規表現を渡します)チェック任意の正気を行いますが、有効な日付をチェックすると、何かyou shouldn't be doing with a regex anywayではありません。

+0

あなたの答えをありがとうが、12.12.12と12.12.1はどうすればそれを制限できますか? – hardik

+1

@ハディック:いいえ、そうではありません。 '{1,4}'部分(前のトークンの1-4回の繰り返しを意味する)を '{4}'(正確に4回の繰り返しを意味する)に変更しましたか? –

+0

ああ、それを終えました...あなたに感謝Tim Pietzcker ...... :) – hardik

0

はこれを試してみてください:

$regex = '#^[0-9]{2}.[1-9][0-9]{0,1}.[0-9]{4}$#'; 

それは2つの最初の形式ではなく、他人を許可する必要があります。

関連する問題