以下if语句有效,但很丑陋,我觉得使用preg_match REGEX可以实现相同的 。怎么样?
基本上我还不知道如何将正则表达式中的位数限制为4。并且一旦满足4个数字标准,我想将true的回报限制在2019年至2025年之间。
正则表达式示例:
/* digits only, no dots */
function is_digits($element) {
return !preg_match ("/[^0-9]/", $element);
}
PHP示例
// SET $TARGET_YEAR TO current year in [yyyy] format.
// Is set, Is not empty, Is numeric, Is 4 digits long?
if(isset($_GET["year"]) && !empty($_GET["year"]) && is_numeric($_GET["year"]) && strlen($_GET["year"]) == 4) {
// WE HAVE A REAL YEAR.
// SET $TARGET_YEAR TO target year in [yyyy] format.
self::$TARGET_YEAR = $_GET["year"];
} else {
// WE DON'T HAVE A REAL YEAR.
// SET $TARGET_YEAR TO current year in [yyyy] format.
self::$TARGET_YEAR = date('Y');
}
答案 0 :(得分:3)
对于这样的简单检查,不需要正则表达式。您现有的代码可以简化为:
$year = (int)$_GET["year"] ?? 0;
if ($year >= 2019 && $year <= 2025) {
// do stuff
}
只需cast the string as an integer,然后检查范围。如果字符串不是有效数字,则强制类型转换会将其变为0。如果未设置该值,则null coalesce还将其变为零。
答案 1 :(得分:2)
这应该可以解决问题。当您将数字4放入花括号时,如果使用0,4,则只允许4个数字,它将允许0至4位数字。
/* digits only, no dots */
function is_digits($element) {
$element = preg_match ("/^[0-9]{4}$/", $element);
if($element > 2019 && $element < 2025) {
return true; //Or $element
} else {
return false; //Or something else you want
}
}
答案 2 :(得分:1)
您可以使用内置的验证过滤器:
$opts = ['options' => ['min_range' => 2019, 'max_range' => 2025]];
if($date = filter_input(INPUT_GET, 'year', FILTER_VALIDATE_INT, $opts)) {
//yes
}