ホームページ > バックエンド開発 > PHPチュートリアル > PHP 正規表現が ISO 日付形式の検証に失敗するのはなぜですか?

PHP 正規表現が ISO 日付形式の検証に失敗するのはなぜですか?

Patricia Arquette
リリース: 2024-12-15 11:50:11
オリジナル
410 人が閲覧しました

Why is my PHP regex failing to validate an ISO date format?

正規表現が 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート