Ҷамъи рақамҳои ҷайбҳо дар ибораҳои муқаррарии PHP
Ҳолати зеринро дида мебароем. Фарз мекунем, ки мо
тағирёбандае бо соли дорем, ки метавонад аз
1990 то 2099 тағир ёбад.
Фарз мекунем, ки мо мехоҳем ду рақами охири
солро дар ҷайб гирем. Ибораи муқаррарии мувофиқро нависед:
<?php
$reg = '#19(9\d)|20(\d\d)#';
?>
Аммо, дар ин ҷо як норасоии фаврӣ моро интизор аст. Масъала ин аст, ки барои солҳои асри гузашта ду рақам ба ҷайби якум меафтад, ва барои солҳои асри дуввум - ба ҷайби дуюм. Ба мисолҳо нигарем.
Ин вариантҳои якум аст:
<?php
$str = '1991';
preg_match($reg, $str, $res);
var_dump($res); // [1 => '91']
?>
Ва ин вариантҳои дуюм аст:
<?php
$str = '2021';
preg_match($reg, $str, $res);
var_dump($res); // [2 => '21']
?>
Ҳоло фарз мекунем, ки мо мехоҳем рақамҳои ёфтаи солро дар тағирёбанда сабт кунем. Моро мушкилие интизор аст, зеро мо ба дақиқӣ намедонем, ки маълумотро бо кадом калид аз ҷайб гирем:
<?php
$year = $res[1]; // калиди зарур ё 1, ё 2
?>
Мушкилиро тавассути шарт ҳал кардан мумкин аст:
<?php
if (!empty($res[1])){
$year = $res[1];
} else{
$year = $res[2];
}
?>
Аммо, ҳалли содатар мавҷуд аст. Шумо метавонед истифода баред аз
фармони махсус (?| ). Ҳамаи ҷайбҳо,
ки дар дохили он ҷойгиранд, рақами якхела хоҳанд дошт.
Биёед ибораи муқаррарии худро ислоҳ кунем
<?php
$reg = '#(?|19(9\d)|20(\d\d))#';
?>
Ва ҳоло соли мо албатта дар ҷайби рақами як хоҳад буд:
<?php
$year = $res[1];
?>
Сатрҳо бо санаҳо дода шудаанд, ки сол метавонад
аз 1990 то 2099 тағир ёбад:
<?php
$arr = [
'31-12-2025',
'30-11-1995',
'29-10-1990',
];
?>
Барои ҳар як сана рӯзро ба ҷайби якум, моҳро ба дуюм, ва ду рақами охири сол - ба ҷайби сеюм гузоред.