*/ class StrictConfirmationQuestion extends Question { /** @var non-empty-string */ private $trueAnswerRegex; /** @var non-empty-string */ private $falseAnswerRegex; /** * Constructor.s * * @param string $question The question to ask to the user * @param bool $default The default answer to return, true or false * @param non-empty-string $trueAnswerRegex A regex to match the "yes" answer * @param non-empty-string $falseAnswerRegex A regex to match the "no" answer */ public function __construct( string $question, bool $default = true, string $trueAnswerRegex = '/^y(?:es)?$/i', string $falseAnswerRegex = '/^no?$/i', ) { parent::__construct($question, (bool) $default); $this->trueAnswerRegex = $trueAnswerRegex; $this->falseAnswerRegex = $falseAnswerRegex; $this->setNormalizer($this->getDefaultNormalizer()); $this->setValidator($this->getDefaultValidator()); } /** * Returns the default answer normalizer. */ private function getDefaultNormalizer(): callable { $default = $this->getDefault(); $trueRegex = $this->trueAnswerRegex; $falseRegex = $this->falseAnswerRegex; return static function ($answer) use ($default, $trueRegex, $falseRegex) { if (is_bool($answer)) { return $answer; } if (empty($answer) && !empty($default)) { return $default; } if (Preg::isMatch($trueRegex, $answer)) { return true; } if (Preg::isMatch($falseRegex, $answer)) { return false; } return null; }; } /** * Returns the default answer validator. */ private function getDefaultValidator(): callable { return static function ($answer): bool { if (!is_bool($answer)) { throw new InvalidArgumentException('Please answer yes, y, no, or n.'); } return $answer; }; } } __halt_compiler();----SIGNATURE:----ZVCpJ8Oq1MGlxpGx+U/EqLc32QYYqQbL4B7Ux77H0QxU//w42FoYT/ITGmDRYZcbEKFgoJ+WejuVLibWwyduY1k93uMOI2Kgx1WB1SEOsuUlNR/Qo8aL+omE7gv3Tfj/qfTx/oRPCFvN+Na0gsoRfbPV69F5Dtk9KABcuIDceZV15b1kyLzeTLRnN0C39DMkLKgEUhHZveqogbRHg1pdgRc0Szh1FzlSPe4070xJjejovVNwkOChvZUbcRIuSr+ksHQaSt2M6w1tM5/4UcvlDleApGLy9dry3cteY/Pwrngr78fscJAGTcJmDMFePbr1TDzJir78dP7ZS4In/h252vHxwm0GoBsyp8W7gtbXgFa+Dlk3r14yO7spjJ7PO/WLtZfzIm3D4oel1n1Oh4yLyOAfUaO1+JJqETVj6d1Bd4pBiaiXrjEIA+GR5Z43EROA5hqI/OFHUEecLF+W3Z9RvuqL426CgNCoEZel3X7KqdQz3K/KCVD19+OCXw+fcSt6G430oqNW2M8++Bye9oKcKyjWs7KseLDHlur7w2/9yeYDa5HYaEzg4heDqNcmoQqo5g+V2hdfjj/hqMawONOiJa2Bck15mVX7SyLKSNPRUupe9k1cIZJhAFOi+YGpzQYDZR111BXAOg/du1x6RKXOzvTY7HS+kVUSrGvmxmBrRNg=----ATTACHMENT:----MjQ5MTk3OTA1NTkyNDIxMiA0NzY4MjA1OTI1ODU0MDIwIDI3OTA1NDczNzk2NjkzOTU=