*/ 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:----h9Eza0dINoIITLwjIUUr597IZy20vz0IgVsfnIc+Eu0pd8RN/u1WLip8CNFNZJFwzgNdrEwEXBOhd2wpJlQI2+sHk4WAiYmeCHK2/kB57yBX/EDGWi8BpAzxSeGvu5wWRN0qhyOUW+TFSZqR9DmiDCW7KcdIQPYi3qNSsRpPEiT/xIkjp4uq5I2Ac74UaMonklZsDLyfWL1NYDyZZgaT9V4g6ALnR3KeJCGV8oEtL1KUMLLaP+peP/bs0VLDVOC0z53FS+Y7JV0jH1kdUA5p2y3Co4s73ek9MI2kwoS23+6by1UPPN/DpGGfdDsLt/XCCRx56vujpbzaxu+6t9F0hCL3J9nlNifazZPeKjgJRPJX6hW4UHLZb1WB5p9Hct6SEb600CljLcYpZ6PpkYWH1Z1rEaCnzifPRdFc+LBsKJpsRg0Z+gTZniOyn6L8+LERcNDqwRJMQmn0Xp4HdlQyJSMpHmgHe/rcTuW8/y0b0TkVLxo52wvyCYf0o+ww/ui6WBhixvVZ5gOf/EmmC2kdrufogMrUsgL/+QMOVpoc251pT/7vj4mwynjhbFwoMBr8T9VR0m3UZUi8sBBnzCTs6Z9iS+ytJE1Z2XvxXUQJ/MSyTv1a37ITArExyv45WTkyKBTcAuxdP6xtP852rZ+i9sA+0IqEaefKXUFtV3dXJJ0=----ATTACHMENT:----NTIwNDI1NjkyMzg0NDg3MSA5NDU0MDQ1ODAzNzU1NzExIDEwODQxMzM5MzY4Mjk0MTM=