0

なぜ私がこのエラーを受け取るのか誰かが知っていますか:preg_match() [function.preg-match]: Unknown modifier '(' この方法を使用して:

function checkFBDateFormat($date) {
    if(preg_match ("/^([0-9]{2})/([0-9]{2})/([0-9]{4})$/", $date, $parts)){
        if(checkdate($parts[2],$parts[1],$parts[3]))
            return true;
        else
            return false;
    } else {
        return false;
    }
}
4

6 に答える 6

0

「/」をエスケープせず、ifステートメントも完了しなかった場合は、次のことを試してください。

        function checkFBDateFormat($date) {
        if(preg_match("/^([0-9]{2})\/([0-9]{2})\/([0-9]{4})$/", $date, $parts)){
            if(checkdate($parts[2],$parts[1],$parts[3])) {
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }

echo var_dump(checkFBDateFormat('08/09/2012'));
于 2012-09-19T11:24:26.320 に答える
0

/式の区切り文字として使用します。しかし、とにかくそれは完全に不要です

$parts = explode('/', $date);

さらに良い: http: //php.net/datetime.createfromformat

何が起こるかを理解するために:PCRE正規表現では、パターン自体の最初と最後に区切り文字が必要です。2番目の区切り文字以降はすべて修飾子として扱われます。したがって/、区切り文字(常に最初の文字)として使用することにしたので、パターンは。の直後に終了しました/^([0-9]{2})/。次のすべて((最初はa)は修飾子として扱われますが(、既存の修飾子ではありません。

正規表現を維持したい場合は、次のような別の区切り文字を使用することをお勧めします

~^([0-9]{2})/([0-9]{2})/([0-9]{4})$~
#^([0-9]{2})/([0-9]{2})/([0-9]{4})$#

-extensionについてのマニュアルを読んでPCREください

2つの追加コメント:

  • $parts使用する前に、を定義する必要があります
  • 33/44/5678のような日付は許可されますが、拒否されるため、式は非常に不正確であることを忘れないでください1/1/1970
于 2012-09-19T11:09:22.850 に答える
0

たとえば、最初の文字がスラッシュの場合/、正規表現の区切り文字としてスラッシュが検出されます。したがって、正規表現は一部にすぎません^([0-9]{2})。そして、2番目のスラッシュの後のすべては、正規表現の修飾子として認識されます。

本当にスラッシュを一致させたい場合は、\/それをエスケープするために使用します

于 2012-09-19T11:09:59.310 に答える
0

正規表現でスラッシュを使用しているため、他の区切り文字を使用する必要があります。次のことを試してください。

preg_match ("#^([0-9]{2})/([0-9]{2})/([0-9]{4})$#", $date, $parts)
于 2012-09-19T11:10:59.083 に答える
0

次のように、スラッシュをエスケープする必要があります。

if(preg_match ("/^([0-9]{2})\/([0-9]{2})\/([0-9]{4})$/", $date, $parts)){
于 2012-09-19T11:14:55.350 に答える
0

正規表現をまったく使用しないことを検討することをお勧めします。

<?php
// simple example
$timestamp = strtotime('12/30/2012');
if ($timestamp) {
    // valid date… Now do some magic
    echo date('r', $timestamp);
}
于 2012-09-19T11:48:48.097 に答える