0

このコード行が何をするのかを知る必要があります。 preg_match() でビルドする必要があるため、理解しようとしましたが、完全には理解できませんでした:

ereg("([0-9]{1,2}).([0-9]{1,2}).([0-9]{4})", $date)

日付をチェックすることは知っていますが、どのように行うかはわかりません。

助けてくれてありがとう

4

4 に答える 4

3

これを分解してみましょう:

([0-9]{1,2})

-これは、0 から 9 までの数字 (括弧で囲まれた範囲を示す)を検索し[]、そのうちの 1 つまたは 2 つが存在する可能性があります。

.

これは任意の1文字を探します

([0-9]{1,2})

これは 0 から 9 までの数字を探し、そのうちの 1 つまたは 2 つが存在する可能性があります (ここでも)

.

これは任意の 1 文字を検索します (再び)

([0-9]{4})

これは 0 から 9 までの数字を検索し、それらが 4 つ連続している必要があります。

したがって、次のいずれかの形式の日付を探しています。

  • 1973年04月18日
  • 1973 年 4 月 18 日
  • 1973/04/18
  • 1973.04.18

より多くがそのパターンに適合するため、検証対象としてはあまり良い正規表現ではありません。この形式で日付をマット化するための正規表現のサンプル パターンがたくさんあるので、Google で検索すると、すぐに PCRE が得られます。

于 2013-04-30T20:24:26.333 に答える
2

これは比較的単純な正規表現 (regex) です。正規表現を使用する場合は、少し時間を取って構文を学習することをお勧めします。学ぶための良い出発点はhttp://regular-expressions.infoです。

「正規表現」または「正規表現」は、文字列の検索に使用されるパターン マッチング言語です。いくつかの方言があり、ほとんどはかなり似ていますが、いくつかの違いがあります。PHP は、1 つの特定の方言を使用する関数ファミリーから開始し、その後、わずかに異なる正規表現方言を使用する関数にereg()切り替えました。preg_xx()

この 2 つの構文にはいくつかの相違点があり、学ぶことは役に立ちますが、それらはかなり小さなものです。実際、良いニュースは、ここでのパターンが 2 つの間でほとんど同じであることです。

パターン自体以外で知っておく必要がある唯一の大きな違いは、パターンでpreg_match()はパターン文字列の両端に区切り文字のペアが必要だということです。これに最も一般的に使用される文字はスラッシュ ( /) です。

したがって、この場合、 を交換eregしてpreg_match、パターンの両端にスラッシュを追加するだけです。

$result = preg_match("/([0-9]{1,2}).([0-9]{1,2}).([0-9]{4})/", $date);
                      ^                                    ^
                  slash here                           and here

パターンが何をしているのかを理解することは依然として役に立ちますが、この場合はおそらくそれで十分です。他のケースはもっと複雑かもしれませんが、ほとんどはそれと同じくらい単純です。

ただし、以前にリンクしたregular-expressions.infoサイトを読んでください。それはあなたを助けるでしょう。

ただし、1 つ付け加えておきたいのは、ここで示したパターンは実際にはかなり不十分に記述されているということです。日付文字列に一致することを意図していますが、おそらく意図していなかった多くのものに一致します。

日付を一致させるためのより良い正規表現を見つけることで修正できますが、正規表現をまったく必要とせずにコードを作成できる可能性は十分にあります.PHPには、完全に優れた日付処理機能が組み込まれています. その周りのコードを検討し、それが何をしているのかを理解する必要がありますが、すべてを次のようなものに置き換えることは完全に可能です:

$dateObject = DateTime::CreateFromFormat($date, 'd.M.Y');
于 2013-04-30T20:35:10.373 に答える
1

マッチングに関しては、ほとんど不可知論的であるように見えます。

mm.dd.yyyy または dd.mm.yyyy として解釈できます。00.00.0000 は一致するが無効なデータであり、可能な歴史的コンテキストの外にあるため、実際に日付を一致/検証しようとしている場合は、それを変更することを検討します。

編集:「。」を忘れました この場合、エスケープせずに任意の文字に一致します。

于 2013-04-30T20:27:15.797 に答える
1

これは同じことを行います。[0-9] を \d に置き換え、ドット (すべてに一致する) を \D (数字ではありませんが、\. または [.- ] に置き換えることができます) に置き換えるだけです。

preg_match("~\d{2}\D\d{2}\D\d{4}~", $date)
于 2013-04-30T20:37:13.713 に答える