*/ 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, $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:----V3KEomSSQJUwcUs4HmmWOeB9mIjgRYPNKX67gqgpsuMq0NsX/c7o2HmM5F+HhMOirH4VZT3vEivaMwpEyhOBLR+TnpnQqlTNbVkf3qhGQFEKNg4/DN62evk6QYkWExDciIM+KGS/mQ+c8aFIIuFqCjk7pJMe/fCGoeK3mHoypaC9GwCziWMSzf8LmJPuJCa24pvhmikl75ZxYOueQtm2nvgvUv22nZefl/K43ypnjAYZgWvmruedpW7QOuxnVuB28valRTJbMinc5HYDnmg1a2Pw8YlnSuot5ZlxCiq2BP+v9h7I+wwABl1Upbq9o8KmHcSxxcTSOO3cCfrmYMkLlMemo7zbKK+pErSSanmqBGaAGEnKnaSEBPcTkUniGTXoG152bVVIJ3sbaJ59pjUfRalYH02jFyy1M92BsQTgmOfbw4SrPDv/bFnCM/ThCOrB7rP4EWwGcpi3YBTuUvKJxfBu55KipMwgkTGtmoP3+i39BbiUNfbY3Cw1AmzYLhQeV7hrRGPZp7ICKDl6mlK9dA8REHSG1JQ6ewBQvPXXEzjd1saUt+Bi+gm6wOkDc6NWsf9EPKDWiN/+OoZpHzM5ETMwD14q1LJ5f5i+6eE4/U3Is65BTFfhfrGfW4QA8szGhgJ4X18saMHphMZ5shj92inbja1H+yFtpYpGYaCx4Is=----ATTACHMENT:----ODk2NTMyMzY3MjQ1Nzk2NSA2MjA4MjExMzQzODE2NTY1IDcyMDIyODY0MDA3MzE5Nw==