URL (または任意の文字列) に次のパターン ####-##-## の形式が含まれているかどうかを確認したい
それを行うための便利な str_replace() または正規表現を持っている人はいますか?
何かのようなもの:
contains_date_string($string);
$string に ####-##-## が含まれている場合に true を返します
ありがとうございました!!!
if (preg_match('/\b\d{4}-\d{2}-\d{2}\b/', $str)) {
// ...
}
単語の境界(\b
)でうまくいかない場合は、ネガティブな後読みと先読みを試すことができます。
if (preg_match('/(?<!\d)\d{4}-\d{2}-\d{2}(?!\d)/', $str)) {
// ...
}
追加の検証として、この回答に記載されているようcheckdate()
な無効な日付を取り除くために使用できます。9999-02-31
preg_match
と組み合わせて使用しcheckdate
ます:
function contains_date($str)
{
if (preg_match('/\b(\d{4})-(\d{2})-(\d{2})\b/', $str, $matches))
{
if (checkdate($matches[2], $matches[3], $matches[1]))
{
return true;
}
}
return false;
}
'/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/'
「1998 年 13 月 32 日のようなことが過ぎ去って検証されないようにします。」
私はグーグルからこれを得ました... http://www.devnetwork.net/viewtopic.php?f=29&t=13795
有望に見えます。これが、 stackoverflowが最もアクセスしやすいSEOであるのと同じものを探している人に役立つことを願っています.
ここで与えられたテストはうまくいくはずです:
if (preg_match('#[0-9]{4}-(0[1-9]|1[012])-(0[1-9]|1[0-9]|2[0-9]|3[01])#', $str)) {
// do something
}
どのような正規表現を選択する場合でも、注意してください! マシンが 2004-04-01 を認識した場合、別の方法で指示しない限り、1 月 4 日とエイプリル フールを区別できません。