首页 > 解决方案 > 太多 Ifs 来检查变量确实包含有效的 4 位数年份

问题描述

以下 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');
}

标签: phpregex

解决方案


这种简单的检查不需要正则表达式。您现有的代码可以简化为:

$year = (int)$_GET["year"] ?? 0;
if ($year >= 2019 && $year <= 2025) {
    // do stuff
}

只需将字符串转换为整数,然后检查范围。如果字符串不是有效数字,则强制转换会将其变为 0。如果未设置该值,则null 合并也会将其变为零。


推荐阅读