以下 if 语句有效,但它很丑陋,我有一种感觉,使用 REGEX preg_match也可以实现同样的效果。如何?
基本上我不知道如何在正则表达式中将位数限制为 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');
}
对于这种简单的检查,不需要正则表达式。您现有的代码可以简化为:
$year = (int)$_GET["year"] ?? 0;
if ($year >= 2019 && $year <= 2025) {
// do stuff
}
只需将字符串转换为整数,然后检查范围。如果字符串不是有效的数字,则强制转换会将其转换为 0。如果未设置该值,则空合并也会将其变为零。
这应该可以解决问题。当您输入大括号数字 4 时,如果您使用 4,0,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
}
}
您可以使用内置的验证筛选器:
$opts = ['options' => ['min_range' => 2019, 'max_range' => 2025]];
if($date = filter_input(INPUT_GET, 'year', FILTER_VALIDATE_INT, $opts)) {
//yes
}