正規表現が ISO 日付形式を検証できません
質問:
なぜISO スタイルの日付と一致することを目的とした正規表現に続き、次のように機能します。期待されていますか?
if(preg_match('/^([0-9]{4})-([0-9]{2})-([0-9]{2}) ([1-2]{1})([0-9]{1}):([0-5]{1})([0-9]{1}):([0-5]{1})([0-9]{1})$/', $date) >= 1) // ...
答え:
正規表現自体は有効ですが、ここでの問題は スラッシュ の使用にあります。 /"を区切り文字として使用します。 PHP では、正規表現の区切り文字としてスラッシュではなく、二重引用符 " または一重引用符 ' が必要です。
この問題を修正するには、スラッシュを二重引用符に置き換えます。
if(preg_match('/^([0-9]{4})-([0-9]{2})-([0-9]{2}) ([1-2]{1})([0-9]{1}):([0-5]{1})([0-9]{1}):([0-5]{1})([0-9]{1})$/', $date) >= 1) // ...
現在、正規表現は式は ISO スタイルの日付と正しく一致します。
DateTime を使用する利点クラス:
修正された正規表現は ISO 日付を検証しますが、日付と時刻の検証と操作には DateTime クラスを考慮する価値があります。DateTime クラスはより包括的であり、広範囲の日付と時刻を処理できます。
次の例は、DateTime クラスを使用して ISO スタイルの日付を検証する方法を示しています。
function validateDate($date, $format = 'Y-m-d H:i:s') { $d = DateTime::createFromFormat($format, $date); return $d && $d->format($format) == $date; }
以上がPHP 正規表現が ISO 日付形式の検証に失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。