0

YYYY-MM-DDの形式で日付を検索する正規表現がPHPにあります

私が持っているのは:[\d]{4}-[\d]{2}-[\d]{2}

preg_matchを使用して日付をテストしています。問題はそれ2009-11-10が機能することですが、同様に2009-11-1033434機能します。正規表現を実行してからしばらく経ちましたが、正しい場所で停止するようにするにはどうすればよいですか?やってみまし/([\d]{4}-[\d]{2}-[\d]{2}){1}/たが、同じ結果になります。

どんな助けでも大歓迎です。

4

7 に答える 7

12

必要なのはアンカー、特に^$です。前者は文字列の先頭に一致し、後者は末尾に一致します。

私が指摘するもう1つのポイントは、[]不要であるということです。\d文字範囲外でも意味を保持します。

したがって、正規表現は次のようになります/^\d{4}-\d{2}-\d{2}$/

于 2009-11-10T22:36:27.670 に答える
7
^20[0-2][0-9]-((0[1-9])|(1[0-2]))-([0-2][1-9]|3[0-1])$

ユーザーが混乱する問題MMを解決するために、少し余分なチェックを追加しました。DDこれはすべての日付の取り違えをキャッチするわけではありませんが、 と の間、と の間、 と の間の部分を保持YYYYします。20002029MM0112DD0131

于 2016-03-28T20:54:05.293 に答える
3

あなたのデートはどのように終了すると思いますか?

行末の場合は、次のように$してください。

数字以外の文字の場合、次の否定的なアサーション (?!\d)も同様に機能します。

于 2009-11-10T22:35:51.030 に答える
2

おそらく式にアンカーを置きたいと思うでしょう。すなわち

^[\d]{4}-[\d]{2}-[\d]{2}$

キャレットとドル記号に注意してください。

于 2009-11-10T22:35:19.853 に答える
1

[\d]{4}-[\d]{2}-[\d]{2}?

クエスチョン マークは「貪欲でない」を意味します。

于 2009-11-10T22:37:04.750 に答える
0

式の最初と最後に「^」記号と「$」記号の両方を入れてみてください。

/^[\d]{4}-[\d]{2}-[\d]{2}$/

それぞれ文字列の先頭と末尾に一致します。

于 2009-11-10T22:37:02.180 に答える