-1

日付を検証するために、phpで次の正規表現を使用しています。

if(!preg_match("/^(0?[1-9]|[12][0-9]|3[01])/(0?[1-9]|1[012])/([12][0-9]{3})$/i",$date_born)){

しかし、次のエラーが発生し、理由がわかりません。常にReg Expsで「(」を使用していました。

[function.preg-match]:不明な修飾子'('

ヒントはありますか?

4

4 に答える 4

5

/パターン内には、エスケープされていないものが多数あります。

if(!preg_match("/^(0?[1-9]|[12][0-9]|3[01])/(0?[1-9]|1[01etc...
                                           ^---

最も簡単なのは、別の区切り文字に切り替えることです。

if(!preg_match("#^(0?[1-9]|[12][0-9]|3[01])/(0?[1-9]|1[01etc...
                ^----

またはすべての内部をエスケープします/

if(!preg_match("/^(0?[1-9]|[12][0-9]|3[01])\/(0?[1-9]|1[01 etc...
                                           ^^---
于 2012-07-20T16:01:13.773 に答える
2

/正規表現内に区切り文字があります。でエスケープする必要があり\/ます(または、Marc Bが指摘するように区切り文字を変更します)。

if( !preg_match("/^(0?[1-9]|[12][0-9]|3[01])\/(0?[1-9]|1[012])\/([12][0-9]{3})$/i",$date_born)){
于 2012-07-20T16:01:00.127 に答える
1

正規表現でスラッシュをエスケープしなかったため、インタープリターは2番目のスラッシュのみを読み取り、残りはすべて修飾子であると想定します。(修飾子が存在しないため、正規表現が壊れます。

于 2012-07-20T16:00:53.663 に答える
0

正規表現を使用してこれを困難にする理由-代わりにstrptimeを使用してください。

于 2012-07-20T16:06:53.833 に答える