尝试使用 preg_match 检查变量是否具有以下格式 YYYY-MM-DDTHH:MM:SS.MSSZ(ISO8601 时间戳)
Trying to check whether an variable is with the following format YYYY-MM-DDTHH:MM:SS.MSSZ(ISO8601 timestamp) using preg_match
所以我正在尝试使用 preg_match.
检查变量是否具有以下格式 YYYY-MM-DDTHH:MM:SS.MSSZ
(ISO8601 时间戳)
我尝试过的:
$timezone = new DateTime("now", new DateTimeZone(date_default_timezone_get()));
var_dump(boolval(preg_match("/^[0-9]{4,4}-[0-9]{2,2}-[0-9]{2,2}T[0-9]{2,2}:[0-9]{2,2}:[0-9]{2,2}(Z)|(\+[0-9]{2,2}:[0-9]{2,2})$/", date("Y-m-d\TH:i:s." .round(microtime(True) * 1000). "\" . $timezone->format('P')))));
但是 var_dump 总是导致无效结果...
例如,当我使用无效 ISO8601 格式的时间戳时
预期结果:bool(false)
和输出:bool(true)
所以在大多数情况下它会导致 bool(true)
...(无效或有效并不重要)。
DateTime 是一个对象。如果你做 var_dump($timezone)
你会看到的。
有了这些信息,您可以根据需要格式化,如下所示:
$timezone = new DateTime("now", new DateTimeZone(date_default_timezone_get()));
var_dump($timezone->format(DateTime::ISO8601));
输出
string(24) "2018-07-10T12:00:53-0700"
现在,您使用的正则表达式与您输入的值不同。
$timezone = new DateTime("now", new DateTimeZone(date_default_timezone_get()));
$timezone = date("Y-m-d\TH:i:s." .round(microtime(True) * 1000). "\" . $timezone->format('P'));
echo $timezone; //Will Print 2018-07-10T12:04:34.1531249474906-07:00
var_dump(boolval(preg_match("/^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}\.[0-9]+[\-\+][0-9]{2}:[0-9]{2}/", $timezone)));
现在是真的了。
所以我正在尝试使用 preg_match.
检查变量是否具有以下格式YYYY-MM-DDTHH:MM:SS.MSSZ
(ISO8601 时间戳)
我尝试过的:
$timezone = new DateTime("now", new DateTimeZone(date_default_timezone_get()));
var_dump(boolval(preg_match("/^[0-9]{4,4}-[0-9]{2,2}-[0-9]{2,2}T[0-9]{2,2}:[0-9]{2,2}:[0-9]{2,2}(Z)|(\+[0-9]{2,2}:[0-9]{2,2})$/", date("Y-m-d\TH:i:s." .round(microtime(True) * 1000). "\" . $timezone->format('P')))));
但是 var_dump 总是导致无效结果... 例如,当我使用无效 ISO8601 格式的时间戳时
预期结果:bool(false)
和输出:bool(true)
所以在大多数情况下它会导致 bool(true)
...(无效或有效并不重要)。
DateTime 是一个对象。如果你做 var_dump($timezone)
你会看到的。
有了这些信息,您可以根据需要格式化,如下所示:
$timezone = new DateTime("now", new DateTimeZone(date_default_timezone_get()));
var_dump($timezone->format(DateTime::ISO8601));
输出
string(24) "2018-07-10T12:00:53-0700"
现在,您使用的正则表达式与您输入的值不同。
$timezone = new DateTime("now", new DateTimeZone(date_default_timezone_get()));
$timezone = date("Y-m-d\TH:i:s." .round(microtime(True) * 1000). "\" . $timezone->format('P'));
echo $timezone; //Will Print 2018-07-10T12:04:34.1531249474906-07:00
var_dump(boolval(preg_match("/^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}\.[0-9]+[\-\+][0-9]{2}:[0-9]{2}/", $timezone)));
现在是真的了。